这是我参与「第五届青训营 」笔记创作活动的第14天
Redis - 大厂程序员是怎么用的|字节青训营
1.Redis是什么
为啥需要Redis?
冷数据存储到MySQL中,热数据(经常被访问到的数据)存储到Redis中
将热数据存储到内存中
Redis的基本工作原理:
数据会保存到硬盘中防止重启数据丢失
AOF文件:增量数据保存到这个文件
RDB文件:全量数据文件
2.Redis应用案例
下述代码都放到gitee上了
1.连续签到
有个可以描述过期的字段,当超过那个时间点,Redis中存储的值就会过期
String数据结构
数据结构——sds
如图,通过移动sds指针来获取相关信息,buf存储具体的字符串信息,左边存储一些元信息,比如alloc(buf分配的空间大小),len(字符串实际的长度),通过移动指针就可以轻松访问到
2.消息通知
用list作为消息队列
有个监听器,当有新文章时,就推送到ES中
List数据结构Quicklist
Quicklist由一个双向链表和listpack实现
3.计数
Hash
一个用户有多个计数需求时,可以通过hash结构存储
Hash数据结构dict
有多个槽位,每个槽位有一个链表,先找到key对应的槽位,再在槽位中找到要访问的key
rehash操作:是为了扩容(指增加槽位,以提高hash访问效率,当槽位很少时,时间复杂度可能会很大)
4.排行榜
当用户很多时,排序是很费时间的,用mysql的话,就是一个order by的操作
zset数据结构——zskiplist
跳跃表,可降低访问的时间复杂度
5.限流
要求1秒内放行的请求为N,超过N则禁止访问
6.分布式锁
利用了Redis的两个特性:
1.Redis是单线程执行命令
2.setnx只有未设置过才能成功
3.Redis使用注意事项
字节跳动中使用Redis的注意事项
1.大Key、热Key
大key定义
消除大key的方法
1.拆分
2.压缩
拆分