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,如需轉載請自行聯系原作者