原理篇-Redis数据结构

1.动态字符串(Simple Dynamic String)

  • 本质:Redis 专属字符串,不是 C语言 原生 char*
  • 核心目的:防缓冲区溢出、快速获取长度、减少扩容开销
  • 关键特点:
    1. 存长度字段,取长度 O (1)
    2. 预分配冗余空间,减少频繁扩容
    3. 二进制安全,能存图片 / 字节流
  • 极简记忆:改良版字符串,更快更安全

2.intset 整数集合

  • 本质:只存纯数字的有序数组
  • 目的:极致省内存
  • 触发升级:存入超出当前类型范围的数(如本来存 int,塞 long),全员升级扩容
  • 记忆:纯数字专用小集合,超限就升级

3. ziplist 压缩列表

  • 本质:紧凑连续内存块,无多余指针
  • 目的:低数据量下省内存
  • 缺点:增删改会连锁偏移,数据多了巨慢
  • 适用:List/Hash/ZSet 元素少、值小的时候
  • 记忆:轻量省内存,量大必翻车

4. quicklist

  • 本质:双向链表 + 多个 ziplist 拼接
  • 解决痛点:纯链表费内存,纯 ziplist 性能差
  • 现在 Redis 列表底层唯一实现
  • 记忆:折中产物,兼顾内存和速度

5. dict 哈希表

  • 本质:数组 + 链表实现哈希结构
  • 核心:扩容缩容、渐进式 rehash
  • 重点:不是一次性迁移数据,分批迁移不阻塞业务
  • 记忆:Redis 字典底层,慢慢搬家不卡顿

6. skiplist 跳表

  • 本质:多层有序链表,替代平衡树
  • 优势:实现简单、查询插入效率接近红黑树
  • 只用在 ZSet 有序集合
  • 记忆:有序排序专用,多层跳着找数据
结构 特点 典型使用场景
String 单值、最简单 缓存、计数器、分布式锁
Hash 多字段对象 用户信息、商品详情
List 有序可重复、链表 消息队列、时间线
Set 无序去重 点赞、共同好友、抽奖
ZSet 有序去重、带分数 排行榜、延时任务
相关推荐
睡不醒男孩0308238 分钟前
TiDB数据库调研
数据库·tidb
珠***格20 分钟前
实操落地|防逆流装置的安装规范、调试标准与故障处置
网络·数据库·人工智能·分布式·能源·边缘计算
Omics Pro1 小时前
3种蛋白结构输入方式!已申报欧洲发明专利
数据库·人工智能·python·机器学习·plotly
轻刀快马1 小时前
撕开 Spring 的底裤:解析 Bean 生命周期与三级缓存的“破局”之术
java·spring·缓存
itfallrain2 小时前
Spring 构造器循环依赖排查:@RequiredArgsConstructor + @Lazy 到底有没有生效
数据库·python·spring
Database_Cool_2 小时前
AnalyticDB MySQL vs StarRocks/ByteHouse:云数仓选型指南——全托管 vs 自建方案
数据库·数据仓库·mysql·阿里云
Omics Pro2 小时前
「自兹以往」动物肠道微生物组
数据库·人工智能·机器学习·语言模型·自然语言处理
zzz_23682 小时前
【Redis】分布式锁完整演进
数据库·redis·分布式
mN9B2uk173 小时前
数据库的约束简介
java·数据库·sql
计算机安禾3 小时前
【数据库系统原理】第4篇:关系数据结构的形式化定义:域、笛卡尔积与关系模式
数据结构·数据库·算法