β

redis使用HashMap提高内存使用效率

知行合一,止于至善 208 阅读

如果你要存入redis的是形如productId_1234:Y 这种表示每个产品的状态这样简单的<key,value>对,你可以选择以下两种方案
方案1
productId {
1234:Y,
1245:Y
}
将所有的<key,value>对作为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指定的阈值内。

作者:知行合一,止于至善
千里之行,始于足下;合抱之木,生于毫未;九层之台,起于累土
原文地址:redis使用HashMap提高内存使用效率, 感谢原作者分享。

发表评论