API-哈希.png
文檔地址
注意:
在使用hGetAll時,如果哈希元素個數比較多,會存在阻塞Redis的可能。如果開發人員只需要獲取部分field,可以使用hMGet,如果一定要獲取全部
field-value,可以使用hscan命令,該命令會漸進式遍歷哈希類型
內部編碼
- ziplist(壓縮列表)
- hashtable(哈希表)
編碼的選擇
- 內部編碼默認是ziplist(當子建個數比較少且沒有大的value時)
- 當有value大于64字節或者個數超過512,內部編碼會由ziplist變為hashtable
編碼的區別
因為Rziplist使用更加緊湊的結構實現多個元素的連續存儲,所以在節省內存方面比hashtable更加優秀
案例
1.緩存用戶信息
ID | name | age | sex |
---|---|---|---|
1 | abner | 20 | 1 |
2 | abner2 | 21 | 2 |
(1)序列化哈希類型:將用戶信息序列化后用一個鍵保存
hSet user:user_info key serialize(userInfo)
優點:字段內容可以和數據庫對應
缺點:序列化和反序列化占用一定的開銷,當子健比較多或者value較大的時候,會切換成hashtable消耗更多內存。
(2)序列化字符串類型:將用戶信息序列化后用一個鍵保存
set user:1 serialize(userInfo)
優點:簡化編程,如果合理的使用序列化可以提高內存的使用效率。
缺點:序列化和反序列化有一定的開銷,同時每次更新屬性都需要把全
部數據取出進行反序列化,更新后再序列化到Redis中。
(2)哈希類型:每個用戶屬性使用鍵值對,但是只用一個鍵保存。
hMSet user:1 name abner 20 sex 1
優點:簡單直觀,如果使用合理可以減少內存空間的使用。
缺點:要控制哈希在ziplist和hashtable兩種內部編碼的轉換,hashtable會
消耗更多內存。