redis--数据类型 string list

、RedisObject(robj)对象头

Redis 所有 key、value 都会封装为redisObject,5 个字段:

表格

字段 作用
type:4bit 对外数据类型:String/List/Set/ZSet/Hash
encoding:4bit 底层真实编码,共 11 种
lru:24bit 对象最后访问时间,用于 LRU 淘汰
refcount 引用计数,0 代表可回收,用于对象共享
*ptr 指针,指向底层真实数据结构(SDS/ziplist/quicklist 等)

命令:OBJECT encoding key 查看某个 key 的底层编码

二、Redis 一共 11 种编码

表格

编码宏 含义
OBJ_ENCODING_RAW raw SDS 长字符串
OBJ_ENCODING_INT 整数编码(字符串存数字)
OBJ_ENCODING_HT 哈希表 dict
OBJ_ENCODING_ZIPMAP 废弃
OBJ_ENCODING_LINKEDLIST 双向链表(3.2 前 list 用)
OBJ_ENCODING_ZIPLIST 压缩列表
OBJ_ENCODING_INTSET 整数集合
OBJ_ENCODING_SKIPLIST 跳表
OBJ_ENCODING_EMBSTR embstr 短 SDS
OBJ_ENCODING_QUICKLIST quicklist(3.2+list 默认)
OBJ_ENCODING_STREAM Stream 流

三、5 大基础类型对应的底层编码

表格

对外类型 可选底层编码
OBJ_STRING int、embstr、raw
OBJ_LIST Redis3.2 前:LinkedList + ZipList;3.2 之后:QuickList
OBJ_SET intset、HT(dict)
OBJ_ZSET ZipList、SkipList+HT
OBJ_HASH ZipList、HT(dict)

四、String 三种编码(高频考点)

String 底层基于 SDS 简单动态字符串,上限 512MB

  1. INT :存 long 范围内整数;数字直接存在 ptr 字段,不需要 SDS,最省内存
  2. EMBSTR :SDS 长度 ≤44 字节;redisObject + SDS 在一块连续内存 ,一次 malloc,效率高;不可修改,改了自动升级 raw
  3. RAW:SDS 长度>44 字节;robj 和 SDS 分开两次内存分配,支持动态扩容

内存布局区别:

  • INT:robj 内部 ptr 直接存数字
  • EMBSTR:robj 头部和 SDS 连续紧挨
  • RAW:robj 的 ptr 单独指向另一段 SDS 内存

五、List 类型底层演进

List 是双向队列,支持 lpush/rpush/lpop/rpop

  1. Redis 3.2 之前
    • 条件:元素数量<512 且 每个元素<64 字节 → ZipList(紧凑,内存小)
    • 超过阈值 → LinkedList 双向链表(内存碎片多、开销大)
  2. Redis3.2 之后(主流版本)统一 QuickList
    • 结构:双向链表,链表每个节点是一个 ZipList
    • 优点:兼顾 ZipList 低内存、LinkedList 无长度上限,支持压缩
相关推荐
虹科网络安全8 小时前
Search on Flex:用分层存储承载更大规模的 Redis 搜索索引
经验分享·redis·艾体宝·艾体宝it
青瓦梦滋9 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
Joy T11 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
IT规划师12 小时前
Redis 数据类型全解 - Stream 深度:Pending 回收、重试死信与消息队列选型(十一)
redis·.net
虹科网络安全1 天前
RDI 多数据源管道:把分散的数据汇入统一 Redis 数据层
经验分享·redis·艾体宝·艾体宝it·艾体宝redis
我不会起名字3221 天前
Redis 从 0 到 1(三十七·收官):36 篇浓缩成 1 张知识地图 + 50 项生产 Checklist
redis·go·知识体系·checklist·收官
2601_967987371 天前
安装 Redis 或 Redis Stack
linux·windows·redis·macos·安装
小番茄程序猿1 天前
Redis 编码压测 59 轮:HSET 快 23 倍是假象,SMEMBERS 慢 30 倍是真的
redis·后端
鶴哥只手遮天1 天前
《Redis 8.10.3 深度剖析》系列 ·第 13 章 Set:三种编码、集合运算与随机采样
redis·后端·开源