【Redis】数据结构和内部编码

数据结构和内部编码

type 命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合),但这些只是 Redis 对外的数据结构.

实际上Redis内部针对每个数据结构都有自己的内部编码, 而且是多种实现, 这样Redis会在合适的场景选择合适的内部编码

可以看到每种数据结构都有⾄少两种以上的内部编码实现,例如 list 数据结构包含了 linkedlist 和ziplist 两种内部编码。同时有些内部编码,例如 ziplist,可以作为多种数据结构的内部实现,可以通过 object encoding 命令查询内部编码:

可以看到 hello 对应值的内部编码是 embstr,键 mylist 对应值的内部编码是 ziplist。

Redis 这样设计有两个好处:

  1. 可以改进内部编码, 而对外的数据结构和命令没有任何影响, 这样一旦开发出更优秀的内部编码, 无需改动外部数据结构和命令, 例如Redis 3.2 提供了 quicklist, 结合了 ziplist 和linkedlist 两者的优势, 为列表类型提供了一种更为优秀的内部编码实现, 而对用户来说基本无感知.

  2. 多种内部编码实现可以在不同场景下发挥各自的优势, 例如 ziplist 比较节省内存, 但是在列表元素比较多的情况下, 性能会下降, 这时候 Redis 会根据配置选项将列表类型的内部实现转化为 Linkedlist, 整个过程用户同样无感知.

相关推荐
2401_8414956416 小时前
【数据结构】B+树
数据结构·数据库·c++·b+树·概念·结构·操作原理
Hardworking66618 小时前
第7章 软硬件系统集成
数据库·软硬件系统集成
名字还没想好☜18 小时前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
皓月斯语18 小时前
【C++基础】三目运算符
开发语言·数据结构·c++
熊猫钓鱼>_>18 小时前
Redis 突发缓存穿透:一次完整的定位复盘
数据库·人工智能·redis·缓存·ai·agent·智能
wenb1n19 小时前
MySQL诊断系列(3/6):索引分析——5个SQL揪出“僵尸索引”
数据库·人工智能·编程语言
Ethan010719 小时前
redis 热key问题如何解决+场景
redis
剑锋所指,所向披靡!19 小时前
数据结构之拓扑排序
数据结构
段一凡-华北理工大学19 小时前
向量数据库实战:选型、调优与落地~系列文章03:向量相似度算法全解:余弦、欧氏、内积,到底该用哪个?
大数据·数据库·人工智能·算法·机器学习·向量相似度·高炉炼铁
ClouGence21 小时前
CloudDM 数据库管理平台,全新 UI,更清晰、更高效!
数据库·开源