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

相关推荐
李兆龙的博客2 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
yi0113 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
倔强的石头_4 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间5 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西5 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西5 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹6 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
H.莓飛6 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有7 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
loong_XL7 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型