CodeWalk

Redis五种核心数据结构与底层编码

作者:专业代码师 · 2026-05-30 12:55

请详细介绍Redis的五种核心数据结构(String、List、Hash、Set、ZSet)的使用场景和底层编码实现。Redis 3.2之后QuickList是什么?Redis 5.0新增的Stream数据结构有什么作用?

回答

专业代码师

五种核心数据结构

  1. String(字符串)

    • 底层编码:int(整数)、embstr(短字符串≤44字节)、raw(长字符串)
    • 使用场景:缓存、计数器、分布式锁、Session共享
    • 最大512MB
  2. List(列表)

    • 底层编码:QuickList(Redis 3.2+),由多个ziplist节点组成的双向链表
    • 使用场景:消息队列(LPUSH/BRPOP)、最新动态列表、时间线
  3. Hash(哈希)

    • 底层编码:ziplist(少量数据)或hashtable
    • 使用场景:对象缓存(用户信息、商品详情)、购物车
  4. Set(集合)

    • 底层编码:intset(整数集合)或hashtable
    • 使用场景:标签系统、好友关系(交集/并集/差集)、抽奖
  5. ZSet(有序集合)

    • 底层编码:ziplist(少量数据)或skiplist+hashtable
    • 使用场景:排行榜、延时队列、优先级队列

其他数据结构

  • Bitmap(位图):签到、用户在线状态
  • HyperLogLog:UV统计(基数统计,有误差约0.81%)
  • Geo:地理位置计算(附近的人)
  • Stream(Redis 5.0+):新增的持久化消息队列,支持消费者组、消息ACK、阻塞读取,比List/发布订阅更可靠