5种基础数据结构
- String 字符串
- list 列表
- hash 字典
- set 集合
- zset 有序集合
deepseek的回答
String
内部编码
redis根据当前值的类型和长度决定使用哪种内部编码,共3种内部编码:
- int :value为整数时
- embstr : 短字符串(长度<= 44字节)
- raw :长度 > 44字节
embstr:embstr 利用 jemalloc 的 64 字节内存块,连续存放 redisObject
(16 字节)和 SDS 头(3 字节)+ 字符串内容(44 字节)+ 结束符(1 字节)。
raw:redisObject
和字符串数据(SDS,Simple Dynamic String)分开存储
应用场景
计数器(如视频播放数计数)
incr key : 对值做自增操作
可以实现快速计数,查看缓存,同时异步落地到其他数据源。
共享session
缓存
限速
每分钟获取验证码的频率,同一ip每秒钟访问不得超过n次等
设置key的过期时间: set key value EX 60 NX
Hash
内部编码
- ziplist / listpack (Redis 7.0 后,ziplist 被 listpack 替代(解决 ziplist 连锁更新问题),但逻辑类似。)
- hashtable
List
内部编码
ziplist/linkedlist
→ quicklist(ziplist 节点)
→ quicklist(listpack 节点)
。
Set
内部编码:listpack
zset
内部编码
- ziplist / listpack
- skiplist