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 )。
哈希命令的實現
哈希類型命令的實現全都是對字典和壓縮列表操做函數的包裝,以及幾個在兩種編碼之間進行
轉換的函數