Redis五种核心数据结构与底层编码
请详细介绍Redis的五种核心数据结构(String、List、Hash、Set、ZSet)的使用场景和底层编码实现。Redis 3.2之后QuickList是什么?Redis 5.0新增的Stream数据结构有什么作用?
回答
专业代码师
五种核心数据结构:
-
String(字符串)
- 底层编码:int(整数)、embstr(短字符串≤44字节)、raw(长字符串)
- 使用场景:缓存、计数器、分布式锁、Session共享
- 最大512MB
-
List(列表)
- 底层编码:QuickList(Redis 3.2+),由多个ziplist节点组成的双向链表
- 使用场景:消息队列(LPUSH/BRPOP)、最新动态列表、时间线
-
Hash(哈希)
- 底层编码:ziplist(少量数据)或hashtable
- 使用场景:对象缓存(用户信息、商品详情)、购物车
-
Set(集合)
- 底层编码:intset(整数集合)或hashtable
- 使用场景:标签系统、好友关系(交集/并集/差集)、抽奖
-
ZSet(有序集合)
- 底层编码:ziplist(少量数据)或skiplist+hashtable
- 使用场景:排行榜、延时队列、优先级队列
其他数据结构:
- Bitmap(位图):签到、用户在线状态
- HyperLogLog:UV统计(基数统计,有误差约0.81%)
- Geo:地理位置计算(附近的人)
- Stream(Redis 5.0+):新增的持久化消息队列,支持消费者组、消息ACK、阻塞读取,比List/发布订阅更可靠