7月 6, 2018 |
Nix.Huang
如果你要存入redis的是形如productId_1234:Y 這種表示每個産品的狀态這樣簡單的對,你可以選擇以下兩種方案
方案1
productId {
1234:Y,
1245:Y
}
将所有的對作為redis的HashMap的field, value。 由于map 實作複雜,指針消耗額外資源。是以該方案耗費記憶體較多
方案2:
productId_1234:Y
productId_1245:Y
每個産品作為一個獨立的key, value 對直接存放在redis中。 同樣的問題,耗資源較多
方案三
productId_12{
34:Y,
45:Y
}
将産品id的低2位作為map的域, 而将産品id除低2位外的其他位數和productId_一起構成map的key, 這樣能享受redis對含少量域的map的記憶體優化,使用類似數組的線性結構存儲而不是使用真正的map結構, 當然要享受這種優化, 需要在配置檔案中啟用如下配置項
hash-max-zipmap-entries 512 (hash-max-ziplist-entries for Redis >= 2.6)
hash-max-zipmap-value 64 (hash-max-ziplist-value for Redis >= 2.6)
表示map中域的個數小于hash-max-ziplist-entries指定的值,且map中每個域對應的值的長度小于hash-max-ziplist-value時才會觸發這一優化。上面類似于對産品id%100的操作就是為了将每個map中的域個數控制在hash-max-ziplist-entries指定的門檻值内。
Posted in: redis