- 字符串(String):Redis 中的字符串采用简单动态字符串(Simple Dynamic Strings,SDS)作为底层实现。SDS 是一种可变长度的字符串,类似于 C 语言中的字符数组,但是 SDS 支持自动扩容和缩容
- 哈希表(Hash):Redis 中的哈希表底层采用字典(Dictionary)实现。字典是一种基于哈希表实现的无序键值对集合,支持高效的插入、查找和删除操作。Redis 中的字典实现采用链式哈希表,即使用拉链法处理哈希冲突,同时在插入和删除元素时,支持自动扩容和缩容。适用于高并发的场景。
- 列表(List):Redis 中的列表采用双端链表作为底层实现,同时在列表的两端各维护一个指针,支持快速的在头部和尾部进行元素的插入和删除操作。
- 集合(Set):Redis 中的集合底层采用哈希表实现。集合中的元素作为哈希表中的 key 存储,而 value 则被设为 NULL。
- 有序集合(Sorted Set / ZSet):Redis 中的有序集合底层采用跳跃表(Skip List)和哈希表相结合的方式实现。跳跃表是一种高效的有序数据结构,可以在 O(log n) 时间内完成元素的查找、插入和删除操作。在 Redis 中,有序集合的元素作为跳跃表中的 key 存储,而 value 则存储在哈希表中。
- String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。
- Hash 类型:缓存对象、购物车等。
- List 类型的应用场景:消息队列(但是有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)等。
- Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
- Zset 类型:排序场景,比如排行榜、电话和姓名排序等。
其他还有 Bitmaps,GEO, Stream, HyperLogLog
Redis内部有10种编码,根据数据长度,自动转换编码方式