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

相关推荐
Source.Liu9 分钟前
【A11】服务器数据库结构笔记
服务器·数据库·笔记
isNotNullX42 分钟前
智能问数技术路线怎么选?从Text-to-SQL到Data Agent一次讲清
数据库·oracle
鸽芷咕44 分钟前
换库不申请停机窗口?金仓KFS数据集成软件双轨并行,还真行
数据库
鸽芷咕1 小时前
月底报表又把库拖垮了?聊聊金仓数据库KES的列存储和真本事
数据库
Juicedata1 小时前
面向 EB 级 AI 存储:JuiceFS 企业版架构演进
数据库·人工智能·架构
十二1 小时前
【洛谷题解】P1115 最大子段和(前缀和 + 维护最小前缀)
数据结构·c++·算法·蓝桥杯
数据库小学妹1 小时前
MySQL表碎片与 OPTIMIZE TABLE:空间回收的代价与边界
数据库·后端·mysql
java_logo1 小时前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
数据库·数据仓库·sql·docker·hue·部署教程·轩辕镜像
Davina_yu1 小时前
1、count(*)、count(1) 和 count(单个字段) 的区别
数据库
锦衣夜行?1 小时前
Oracle 数据库安装失败清理残留步骤
数据库·oracle