欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Redis 五大数据类型

Redis 五大数据类型

2025/4/25 1:16:29 来源:https://blog.csdn.net/weixin_48095246/article/details/147455248  浏览:    关键词:Redis 五大数据类型

Redis 五大数据类型底层结构对比表

类型底层数据结构(Redis ≥ 5/6/7)优点缺点 & 注意点适用场景
String简单动态字符串(SDS)快速、灵活(自动扩容、二进制安全)最大限制 512MB缓存简单对象、计数器(INCR对整数自增)、分布式锁(SETNX)、限流令牌等
List

quicklist(linkedlist + ziplist)

ZipList
⚠️ Redis 7 中 ziplist 被 listpack 替代

插入删除快、结构紧凑
支持分页操作
插入太多可能导致大链表、影响 GC消息队列、任务列表、最新消息显示(如微博Timeline最近N条存List),还可用 lrange 做分页
Setintset(小量整数)
➡️ hashtable(大集合或字符串)
无序去重、添加/删除 O(1)元素太大、需考虑哈希冲突标签集合、联合好友列表、共同好友(交集)计算、抽奖随机抽取(SRANDMEMBER)等
ZSet

✅ skiplist + dict

ZipList

有序结构、范围查询快、支持排名插入删除比 set 慢,跳表占用略大排行榜(score为分数或时间,实现按分排序及排名)、延迟队列(score为时间戳,定时取出<=当前时间的任务)。常用操作有按照分值范围或排名范围取元素(ZRANGE by score或排名)
Hashziplist(小结构)
➡️ hashtable(大字段)
→ Redis 7 使用 listpack 替代 ziplist
节省内存、键值访问快字段太多仍可能较大,适合结构平坦的数据用户信息、商品信息
Bitmap       实际上是字符串的一种,但按bit操作,可以高效地存储海量布尔值用户签到(一位表示某天是否签到)、在线状态位、布隆过滤器底层
HyperLogLog用于基数统计的概率数据结构,特点是占用固定小内存却能近似估计独立元素数量UV统计(网站独立访客数),只需很小内存容忍误差。
Stream(流)Redis 5.0引入的数据类型,类似日志存储消息队列系统,实现可靠消息和消费确认

Redis 版本中结构的演进(关键知识点)

Redis版本替换内容说明
Redis 3.2List 从 ziplist → quicklist改善 list 插入性能
Redis 7ziplist 正式被废弃用 listpack 替代,体积更小、安全性高
Redis 6+支持模块定义自己的数据结构如 RedisTimeSeries、RedisBloom 等

quicklist vs ziplist vs listpack 对比

特性ziplistquicklistlistpack(Redis 7)
内存结构连续内存链表 + ziplist(压缩块)更小的压缩格式(优化内存布局)
插入删除性能差(需内存拷贝)好(链表节点局部更新)中等
安全性存在过边界 bug安全(节点单独处理)安全
使用场景已废弃Redis list 默认实现Hash / ZSet / List 的底层结构之一

实战建议总结:

类型实战建议
String值尽量不超过几 KB,避免大 key 问题
List消息队列用 LPUSH + BRPOP,分页用 LRANGE,注意链表过长
Set用于去重、抽奖、推荐系统;使用前确认数据量和类型是否合适
ZSet排行榜、限时处理任务;可通过 ZREMRANGEBYRANK 清理老数据
Hash

适合存结构化对象,但字段数量不要太大(上千个字段建议分表)

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词