天天看點

hashmap value占用空間大小_redis使用HashMap提高記憶體使用效率

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