10 Redis-哈希对象
哈希对象的编码可以是ziplist或者hashtable。
1.定义
ziplist编码的哈希对象使用压缩列表作为底层实现。每当有新的键值对要加入到哈希对象时,程序会先将保存了键的压缩列表节点推入到压缩列表的表尾,再将保存了值的压缩列表节点推入到压缩列表的表尾。
保存了同一键值对的两个节点总是紧挨在一起,保存键的节点在前,保存值得节点在后。
先添加到哈希对象中得键值对会被放在压缩列表得表头方向,而后来添加到哈希对象中的键值对会被放在压缩列表的表尾方向。
hashtable编码的哈希对象使用字典作为底层实现,哈希对象中的每ge键值对都使用一个字典键值对来保存。
字典的每个键都是一个字符串对象,对象中保存了键值对的键。
字典的每个值都是一个字符串对象,对象中保存了键值对的值。
2.编码转换
当哈希对象可以同时满足下面两个条件时,哈希对象使用ziplist编码:
- 哈希对象保存的所有键值对的键和值的字符串长度都小于64字节。
- 哈希对象保存的键值对数量小于512个。
不能满足以上两个条件的哈希对象需要使用hashtable编码。
注意:以上两个条件的上限值是可以修改的,对应得配置选项为hash-max-ziplist-value和hash-max-ziplist-entries。