Redisbook學習筆記(3)數據類型之哈希表

REDIS_HASH (哈希表) 是HSET 、HLEN 等命令的操做對象, 它使用ide

REDIS_ENCODING_ZIPLIST 和REDIS_ENCODING_HT 兩種編碼方式:函數

wKioL1MGC2GBgniVAACYyMCRA1g493.jpg

字典編碼的哈希表編碼

當哈希表使用字典編碼時,程序將哈希表的鍵(key)保存爲字典的鍵,將哈希表的值(value)spa

保存爲字典的值。server

哈希表所使用的字典的鍵和值都是字符串對象。對象

下圖展現了一個包含三個鍵值對的哈希表:blog

wKiom1MGC8fyKGUBAADrSrRz8iY543.jpg


壓縮列表編碼的哈希表ip

當使用REDIS_ENCODING_ZIPLIST 編碼哈希表時,程序經過將鍵和值一同推入壓縮列表,從而字符串

造成保存哈希表所需的鍵-值對結構:get

wKiom1MGC-7DfYf3AABuWCU0tl0101.jpg

新添加的key-value 對會被添加到壓縮列表的表尾。

當進行查找/刪除或更新操做時,程序先定位到鍵的位置,而後再經過對鍵的位置來定位值的

位置。

編碼的選擇

建立空白哈希表時,程序默認使用REDIS_ENCODING_ZIPLIST 編碼,當如下任何一個條件被滿

足時,程序將編碼從切換爲REDIS_ENCODING_HT :

哈希表中某個鍵或某個值的長度大於server.hash_max_ziplist_value (默認值爲64

)。

壓縮列表中的節點數量大於server.hash_max_ziplist_entries (默認值爲512 )。

哈希命令的實現

哈希類型命令的實現全都是對字典和壓縮列表操做函數的包裝,以及幾個在兩種編碼之間進行

轉換的函數

相關文章
相關標籤/搜索