REDIS_HASH (哈希表) 是HSET 、HLEN 等命令的操做对象, 它使用ide
REDIS_ENCODING_ZIPLIST 和REDIS_ENCODING_HT 两种编码方式:函数
字典编码的哈希表编码
当哈希表使用字典编码时,程序将哈希表的键(key)保存为字典的键,将哈希表的值(value)spa
保存为字典的值。server
哈希表所使用的字典的键和值都是字符串对象。对象
下图展现了一个包含三个键值对的哈希表:blog
压缩列表编码的哈希表ip
当使用REDIS_ENCODING_ZIPLIST 编码哈希表时,程序经过将键和值一同推入压缩列表,从而字符串
造成保存哈希表所需的键-值对结构:get
新添加的key-value 对会被添加到压缩列表的表尾。
当进行查找/删除或更新操做时,程序先定位到键的位置,而后再经过对键的位置来定位值的
位置。
编码的选择
建立空白哈希表时,程序默认使用REDIS_ENCODING_ZIPLIST 编码,当如下任何一个条件被满
足时,程序将编码从切换为REDIS_ENCODING_HT :
哈希表中某个键或某个值的长度大于server.hash_max_ziplist_value (默认值为64
)。
压缩列表中的节点数量大于server.hash_max_ziplist_entries (默认值为512 )。
哈希命令的实现
哈希类型命令的实现全都是对字典和压缩列表操做函数的包装,以及几个在两种编码之间进行
转换的函数