Redis 设计与实现 (一)--数据结构
底层数据结构:动态字符串、字典、整数集合、双端链表、压缩列表
字符串对象:
int 浮点数值
raw 字符串值>32字节
embstr 字符串值<32字节
字符串编码转换:
int => raw int追加的值为字符串
embstr => raw embstr任何修改
列表对象:
ziplist 底层 - 压缩列表
linkedlist 底层 - 双向链表
哈希对象:
ziplist 底层 - 压缩列表
新加键值对,先将键打入压缩列表的表尾,然后同样方式保存值。
同一个键值对挨在一起,键值对有先来后到。
哈希对象所有键值对的字符串长度<64字节
哈希对象所有键值对数量<512个
hashtable 底层 - 字典
字典键和值都是字符串对象。
集合对象:
intset 底层 - 整数集合
集合对象保存的都是整数值
不超过512个元素
hashtable 底层 - 字典
有序集合对象:
ziplist 底层 - 压缩列表 按照元素分值排序
元素长度<64字节
元素个数<128
skiplist 底层 - zset结构(字典+跳跃表)
类型检查和命令多态
操作键:del explre rename type object
字符串键:set get append strlen
哈希键:hdel hset hget hlen
列表键:rpush lpop linsert llen
集合键:sadd spop sinter scard
有序集合:zadd zcard zrank zscore
类型检查: redisObject type
多态命令
内存回收:引用计数
对象共享:将数据库键的值指针指向现有的值对象。
共享值引用计数+1
对象的空转时长:
lru 对象最后一次被命令访问的时间
object idletime 空转时间

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2016-01-17 设计模式(十四):适配器模式