字符串 (String)
String 是 Redis 最基础的类型,但它的底层实现不是 C 语言原生的 char[],而是 SDS (Simple Dynamic String)。
- 底层特性:
- 预分配与惰性释放:减少内存重分配次数,提升修改效率。
- 二进制安全:可以存储图片、音频甚至序列化后的对象。
- 典型场景:缓存对象、计数器(INCR)、分布式锁(SETNX)。
常数复杂度获取长度:SDS 记录了已用长度,无需像 C 语言那样遍历,STRLEN 是 O(1)。

列表 (List)
在 Redis 3.2 之后,List 的底层统一由 quicklist(快速列表)实现,它是双向链表与压缩列表(ziplist)的结合体。而在最新版本中,listpack 正在全面取代 ziplist。
- 核心特性:
- 内存压缩:通过控制每个节点的存储大小,兼顾了链表的灵活性和连续内存的高性能。
- 典型场景:消息队列(BLPOP)、最新动态列表、朋友圈点赞列表。
两端操作极快:LPUSH/RPUSH 都是 O(1)。

哈希 (Hash)
当你要存储一个 User 对象(包含 ID、姓名、年龄)时,Hash 是最优雅的选择。
- 底层进化:
- 数据量小时,使用 listpack/ziplist(连续内存,极度省钱)。
- 数据量大时,转换为 hashtable(真正的哈希表)。
- 优势:相比将对象序列化为 String,Hash 可以只更新其中一个字段(如只改年龄),无需全量重写。
- 典型场景:购物车信息、用户属性存储。
集合 (Set)
Set 保证了元素的唯一性。它的底层由 intset(整数集合)或 hashtable 实现。
- 强大之处:集合运算
- SINTER(交集)、SUNION(并集)、SDIFF(差集)。
- 典型场景:共同好友、抽奖系统(去重)、标签(Tag)系统。
有序集合 (ZSet)
ZSet 是 Redis 中最复杂也最强大的结构。它给每个元素关联了一个 Score(权重),并按权重排序。
- 底层核心:跳跃表 (SkipList):


