it编程 > 数据库 > Redis

Redis 数据结构详解之从五种基础到四种高级

86人参与 • 2026-09-22 • Redis

redis 之所以强大,不只是因为快,更因为它提供了丰富的数据结构——就像仓库里不同形状的收纳盒,各有各的用处,选对了事半功倍。

五种核心数据类型

string

最基本的类型,一个 key 对应一个 value,二进制安全,能存文本、数字、序列化对象,理论上限 512mb。

hash

键值对集合,一个 key 下面挂多个 field-value 对,天然适合存 对象属性。

list

有序字符串列表,底层是双向链表(3.2 后改为 quicklist),支持两端快速插入和删除。

set

无序且元素不重复的集合,查找和去重效率高,支持交集、并集、差集运算。

zset(sorted set)

和 set 类似,但每个元素带一个 score 用于排序,有序 set,底层用跳表 + 字典实现,插入和查询都很快。

四种高级数据类型

随着 redis 版本迭代,又陆续加入了四种高级类型,应对更特殊的场景。

bitmap(位图)

用 bit 位存储数据,一个 bit 只有 0 和 1 两种状态,极度节省空间。

hyperloglog

基数统计算法,用极小的内存(约 12kb)就能统计超大数量级的不重复元素数。

geo(地理空间)

底层基于 zset 实现,存储 经纬度 信息,支持距离计算和范围查询。

stream

redis 5.0 引入的消息流类型,更专业的消息队列方案。

底层编码:数据结构背后的数据结构

表面上是九种数据类型,底层实际由更少的编码结构组合而成。redis 会根据数据量和元素大小自动选择编码,小数据用紧凑结构省内存,大数据切换到高效结构保性能。

三种关键底层结构

ziplist(压缩列表)

连续内存块组成的紧凑型结构,没有指针开销,非常省空间。小数据量的 list、hash、zset 都用它。

但缺点是插入和删除需要移动内存,数据量大了性能会下降,所以达到阈值后会自动转换编码。

quicklist(快速列表)

redis 3.2 之后 list 的默认实现,可以理解为"链表 + 压缩列表"的混合体——每个链表节点是一个 ziplist,既保留了 ziplist 的内存效率,又减少了普通双向链表的内存碎片和指针开销。

skiplist(跳跃表)

zset 的核心结构,在有序链表基础上增加了多层索引,把查找效率从 o(n) 提升到 o(log n)。配合一个字典用来做 o(1) 的成员查找,两者数据共享不重复存储。

编码自动转换

以 zset 为例,默认转换阈值:

hash 和 list 也有类似的自动转换机制,阈值都可以在配置文件里调整。

选型对比:这个需求该用哪种?

需求场景

推荐类型

为什么选它

存单个值、计数器、分布式锁

string

最简单直接,原子操作可靠

存对象的多个属性,经常修改单个字段

hash

字段级操作,不需要整体序列化

消息队列、最新列表、按顺序存取

list / stream

list 简单够用,stream 功能更全

去重、标签、共同好友、集合运算

set

天然去重,集合运算高效

排行榜、带排序的集合

zset

按 score 排序,范围查询方便

签到、在线状态、海量布尔标记

bitmap

极度省空间,位运算高效

统计 uv、独立访客(不要求精确)

hyperloglog

12kb 搞定亿级基数统计

附近的人、地理位置查询

geo

内置经纬度存储和距离计算

生产环境红线:警惕大 key

虽然 string 理论上限 512mb,但生产环境存大 value 是严重的反模式。大 key 不只是 string 的问题,集合类型元素过多同样危险。

大 key 判定标准

数据类型

大 key 阈值

主要风险

string

value > 10kb

网络传输延迟,阻塞其他请求

hash / set / zset

元素数量 > 5,000

hgetall / smembers 全量操作阻塞

list

元素数量 > 10,000

lrange 大范围操作耗时

stream

消息数量 > 10,000

xrange 遍历性能下降

大 key 的四大危害

治理思路

redis 的数据类型看似只是"存东西的不同方式",实际上每种都对应着一类问题的最优解。理解了底层编码和选型逻辑,才能在项目里更好地用 redis。

到此这篇关于redis 数据结构详解之从五种基础到四种高级的文章就介绍到这了,更多相关redis 数据结构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

赞 (0)

您想发表意见!!点此发布评论

推荐阅读

Redis大Key导致生产事故排查与解决方法

09-22

Redis 数据类型全景指南从基础到高级深度解析

09-22

Redis + Node 如何支撑百万级并发的实现

09-23

Redis常用的5种数据类型及其底层结构

09-20

Redis数据类型之九种结构与典型用法

09-20

Tomcat Host组件深度解析(含实例代码)

09-24

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论