redis-API-哈希

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會
消耗更多內存。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Redis的內存優化 聲明:本文內容來自《Redis開發與運維》一書第八章,如轉載請聲明。 Redis所有的數據都...
    meng_philip123閱讀 18,929評論 2 29
  • 參考來源 Redis的內存優化 Redis所有的數據都在內存中,而內存又是非常寶貴的資源。對于如何優化內存使用一直...
    秦漢郵俠閱讀 1,303評論 0 2
  • 哈希,也叫作字典或關聯數組,指的是健值本身又是一個鍵值對結構。偽代碼如下: 命令 設置值 獲取值 刪除字段 計算個...
    蘇近之2017閱讀 447評論 0 0
  • 聲明:本文內容來自《Redis開發與運維》一書第八章,如轉載請聲明。Redis所有的數據都在內存中,而內存又是非常...
    yoqu閱讀 1,522評論 0 2
  • 1.數據結構 1.1字符串 字符串類型的值實際可以是字符串、數字(整數,浮點數),甚至是二進制(圖片、視頻)...
    Sponge1128閱讀 1,270評論 0 0