天天看點

Redisbook學習筆記(3)資料類型之哈希表

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

REDIS_ENCODING_ZIPLIST 和REDIS_ENCODING_HT 兩種編碼方式:

<a href="http://s3.51cto.com/wyfs02/M02/12/6A/wKioL1MGC2GBgniVAACYyMCRA1g493.jpg" target="_blank"></a>

字典編碼的哈希表

當哈希表使用字典編碼時,程式将哈希表的鍵(key)儲存為字典的鍵,将哈希表的值(value)

儲存為字典的值。

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

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

<a href="http://s3.51cto.com/wyfs02/M01/12/69/wKiom1MGC8fyKGUBAADrSrRz8iY543.jpg" target="_blank"></a>

壓縮清單編碼的哈希表

當使用REDIS_ENCODING_ZIPLIST 編碼哈希表時,程式通過将鍵和值一同推入壓縮清單,進而

形成儲存哈希表所需的鍵-值對結構:

<a href="http://s3.51cto.com/wyfs02/M01/12/69/wKiom1MGC-7DfYf3AABuWCU0tl0101.jpg" target="_blank"></a>

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

當進行查找/删除或更新操作時,程式先定位到鍵的位置,然後再通過對鍵的位置來定位值的

位置。

編碼的選擇

建立空白哈希表時,程式預設使用REDIS_ENCODING_ZIPLIST 編碼,當以下任何一個條件被滿

足時,程式将編碼從切換為REDIS_ENCODING_HT :

哈希表中某個鍵或某個值的長度大于server.hash_max_ziplist_value (預設值為64

)。

壓縮清單中的節點數量大于server.hash_max_ziplist_entries (預設值為512 )。

哈希指令的實作

哈希類型指令的實作全都是對字典和壓縮清單操作函數的包裝,以及幾個在兩種編碼之間進行

轉換的函數

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1361461,如需轉載請自行聯系原作者