當前位置:編程學習大全網 - 網站源碼 - Redis 利用 Hash 存儲節約內存

Redis 利用 Hash 存儲節約內存

剛開始用 String 結構來做壹個 key-value 存儲

但這樣單個簡單的 key 存儲的 value 很大

優化方案是使用 Hash 結構,由於 Hash 結構會在單個 Hash 元素在不足壹定數量時進行壓縮存儲,所以可以大量節約內存。這壹點 String 結構裏是不存在的

省內存的原因是新建壹個 hash 對象時開始是用 ziplist(又稱為 small hash)來存儲的。這個 ziplist 其實並不是 hash table,但是 ziplist 相比正常的 hash 實現可以節省不少 hash 本身需要的壹些元數據存儲開銷。 盡管 ziplist 的添加,刪除,查找都是 O(n),但是由於壹般對象的 field 數量都不太多。 所以使用 ziplist 也是很快的,也就是說添加刪除平均還是 O(1) 。如果 field 或者 value 的大小超出壹定限制後,redis 會在內部自動將 ziplist 替換成正常的 hash 實現,這個限制可以在配置文件中指定 hash-zipmap-max-entries 參數來控制。將 hash-zipmap-max-entries 設置為 1000 時,性能比較好,超過 1000 後 HSET 命令就會導致 CPU 消耗變得非常大

原存儲方式:

將數據分段,每壹段使用壹個 Hash 結構存儲,保證了每個 Hash 內部只包含 3 位的 key,也就是 1000 個。如:

這樣公***的前綴只存了壹次,也節約了壹部分內存

總的 2 個優化:

  • 上一篇:湯姆·德馬科的TD序列法
  • 下一篇:在騰訊手機助手打快樂麻將,看廣告都會出錯。怎麽解決?
  • copyright 2024編程學習大全網