天天看点

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