Redis - 大厂程序员是怎么用的|青训营笔记

69 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第14天

Redis - 大厂程序员是怎么用的|字节青训营

1.Redis是什么

为啥需要Redis?

image.png

冷数据存储到MySQL中,热数据(经常被访问到的数据)存储到Redis中

将热数据存储到内存中

image.png

Redis的基本工作原理:

数据会保存到硬盘中防止重启数据丢失

AOF文件:增量数据保存到这个文件

RDB文件:全量数据文件

image.png

2.Redis应用案例

下述代码都放到gitee上了

image.png

1.连续签到

image.png

有个可以描述过期的字段,当超过那个时间点,Redis中存储的值就会过期

String数据结构

数据结构——sds

image.png

如图,通过移动sds指针来获取相关信息,buf存储具体的字符串信息,左边存储一些元信息,比如alloc(buf分配的空间大小),len(字符串实际的长度),通过移动指针就可以轻松访问到

2.消息通知

用list作为消息队列

有个监听器,当有新文章时,就推送到ES中

image.png

List数据结构Quicklist

Quicklist由一个双向链表和listpack实现

image.png

3.计数

Hash

一个用户有多个计数需求时,可以通过hash结构存储

image.png

Hash数据结构dict

有多个槽位,每个槽位有一个链表,先找到key对应的槽位,再在槽位中找到要访问的key

rehash操作:是为了扩容(指增加槽位,以提高hash访问效率,当槽位很少时,时间复杂度可能会很大)

image.png

image.png

4.排行榜

当用户很多时,排序是很费时间的,用mysql的话,就是一个order by的操作

image.png

zset数据结构——zskiplist

跳跃表,可降低访问的时间复杂度

image.png

5.限流

要求1秒内放行的请求为N,超过N则禁止访问

image.png

6.分布式锁

利用了Redis的两个特性:

1.Redis是单线程执行命令

2.setnx只有未设置过才能成功

image.png

image.png

3.Redis使用注意事项

字节跳动中使用Redis的注意事项

1.大Key、热Key

大key定义

image.png

image.png

消除大key的方法

1.拆分

2.压缩

image.png

image.png

image.png

拆分