【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, 整个过程用户同样无感知.

相关推荐
重生之绝世牛码6 小时前
Linux软件安装 —— Elasticsearch集群安装(带密码验证)
大数据·linux·运维·数据库·elasticsearch·软件安装
molaifeng6 小时前
万字长文解析:Redis 8.4 网络 IO 架构深度拆解
网络·redis·架构
敲敲千反田6 小时前
redis哨兵和缓存
数据库·redis·缓存
好奇龙猫6 小时前
【大学院-筆記試験練習:线性代数和数据结构(16)】
数据结构·线性代数·决策树
独泪了无痕6 小时前
SQL数据类型转换:CAST详解及实践
数据库·sql·oracle
知识分享小能手6 小时前
Oracle 19c入门学习教程,从入门到精通,Oracle 用户管理与权限分配 —— 语法详解与实战案例(13)
数据库·学习·oracle
DarkAthena6 小时前
【GaussDB】GaussDB506版本A模式中的date类型
数据库·gaussdb
想做后端的前端6 小时前
Redis中的Lua使用
数据库·redis·lua
小锋学长生活大爆炸6 小时前
【工具】免费的文本读写API
java·数据库·mysql
hope_wisdom6 小时前
C/C++数据结构之用数组实现队列
c语言·数据结构·c++·队列