数据库 ·

Redis学习笔记03-哈希对象

编码可以是ziplist或者hashtable

ziplist

  • 使用压缩列表作为底层实现
  • 保存了同一键值对的两个节点总是紧挨在一起,保存键的节点在前,保存值的节点在后。
  • 先添加到哈希对象中的键值对会被放在压缩列表的表头方向,而后来添加到哈希对象中的键值对会被放在压缩列表的表尾方向。

hashtable

  • 使用字典作为底层实现,每个键值对都使用一个字典键值对来保存。
  • 字典的每一个键都是一个字符串对象,对象中保存了键值对的键。
  • 字典的每个值都是一个字符串对象,对象中保存了键值对的值。

编码转换

当哈希对象可以同时满足以下两个条件时,哈希对象使用ziplist编码

  • 哈希对象保存的所有键值对的键和值的字符串长度都小于64字节
  • 哈希对象保存的键值对数量小于512个;

不能同时满足这两个条件的哈希对象需用hashtable编码。

以上两个条件的上限值是可以修改的,涉及到配置文件的选项:

hash-max-ziplist-value
hash-max-ziplist-entries

参考资料

Redis设计与实现》

参与评论