redis有哪些数据类型

7次阅读
没有评论

 

作为资深 Java 开发,你一定知道 Redis 不仅仅是“键值对”数据库。在面试或架构设计中,区分基本数据类型高级数据结构,并能说出它们的底层实现(Internal Encoding),才是体现资深功底的关键。

以下是 Redis 的 5 种基础类型和 4 种特殊/高级类型:


1. 五大基础数据类型

类型 特点 常用场景 底层实现(部分)
String 最基本的 Key-Value 缓存、计数器、分布式锁、共享 Session SDS(简单动态字符串)
Hash 键值对集合(类似 Java HashMap) 存储对象(如用户信息)、购物车 Ziplist(压缩列表)、Hashtable
List 双向链表(有序、可重复) 消息队列、朋友圈点赞列表、最新动态 Quicklist(双向链表+压缩列表)
Set 无序集合(唯一、不重复) 共同好友、标签、抽奖系统 Intset(整数集合)、Hashtable
Zset (Sorted Set) 有序集合(带权重 Score) 排行榜、带优先级的消息队列 Skiplist(跳表)、Ziplist

2. 四大高级数据结构(面试加分项)

这些是处理大数据量、地理位置或流式数据时的“杀手锏”:

  • Bitmaps(位图)

    • 原理:基于 String 类型的位操作。

    • 场景亿级用户的签到、在线状态统计。1 亿用户每天签到仅占 12MB 内存,极度节省空间。

  • HyperLogLog(基数统计)

    • 原理:概率算法,存在 0.81% 的误差。

    • 场景:统计 UV(独立访客)。无论统计多少数据,每个 Key 只占 12KB 内存。

  • Geospatial (GEO)

    • 原理:基于 Zset 实现,内部使用 GeoHash 编码。

    • 场景附近的人、打车软件的距离计算。

  • Streams (Redis 5.0+)

    • 原理:支持多消费组的持久化消息队列。

    • 场景:实现类似 Kafka 的功能,解决 List 作为 MQ 时无法多播和持久化不稳的问题。


🛠 资深开发的底层视角

在面试中,如果你能多说一嘴**“数据结构会随数据量变化而演进”**,效果直接拉满。

  1. Skiplist (跳表):为什么 Zset 不用红黑树?因为跳表实现更简单,且在范围查询(Range Query)时效率更高。

  2. SDS (Simple Dynamic String):Redis 没有直接用 C 语言的字符串,而是自己封装了 SDS。它记录了长度 len,使得获取字符串长度的时间复杂度从 $O(n)$ 降到了 $O(1)$,且有效防止了缓冲区溢出。

  3. 内存预分配:SDS 在扩容时会预分配多余空间,减少内存重新分配的次数。


📉 状态同步

  • 2026-03-30:已梳理 Redis 全系列数据类型及其底层原理(SDS, Skiplist 等)。

既然你现在正考虑转型但想保留薪资竞争力,理解这些底层选型逻辑(比如为什么选跳表而不是平衡树)能让你在架构面试中非常有说服力。

你想看看在 Java 环境下,如何利用 Redisson 方便地操作这些复杂数据结构(比如 RScoredSortedSet)吗?

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-03-30发表,共计1189字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)