Redis内存优化建议

时间:2018-07-12 21:08:36

标签: memory optimization hash redis set

我有一个Redis主服务器和2个从属服务器。当前所有3个都在同一台UNIX服务器上。 3个实例使用的内存大约为3.5 G,3 G,3G。 Redis数据库中大约有275000个密钥。大约有4000个哈希。 1套有100000个值。 1个列表中有275000个键。它是哈希表和集合的列表。该服务器的总内存为16 GB。当前使用的是9.5 GB。持久性当前关闭。通过强制后台保存,每天一次写入rdb文件。请提供优化建议。当前默认为max-ziplist配置。

2 个答案:

答案 0 :(得分:2)

优化哈希值

首先,让我们看一下哈希。两个重要的问题-每个哈希中有多少个元素,这些哈希中的最大值是多少?如果满足以下条件,则哈希将使用内存有效的ziplist表示形式:

len(hash) < hash-max-ziplist-entries && length-of-largest-field(hash) < hash-max-ziplist-value

您应该根据数据增加redis.conf中的两个设置,但不要超过默认值的3-4倍。

优化集合

除非您提供有关用例的其他详细信息,否则不能优化具有100000的集合。一些一般策略-

  1. 也许使用HyperLogLog-您是否正在使用集合来计算唯一元素?如果您运行的唯一命令是saddscard-也许您应该切换到超级日志。
  2. 也许使用Bloom Filter-您是否正在使用集合检查成员的存在?如果您运行的唯一命令是saddsismember-也许您应该实现布隆过滤器并使用它代替集合。
  3. 每个元素有多大? -集合成员应较小。如果要存储大对象,则可能是做错了。

优化列表

  1. 一个包含275000的列表似乎是错误的。访问列表中心的元素将很慢。您确定列出的用例是正确的数据结构吗?
  2. list-compress-depth更改为1或更高。在redis.conf中了解此设置-需要权衡。但是对于275,000个元素的列表,您当然希望启用压缩。

工具

使用开源redis-rdb-tools分析您的数据集。它会告诉您每个键占用多少内存。这将帮助您决定将精力集中在哪里。

您也可以参考此memory optimization cheat sheet

还有什么?

您只提供了很少的用例详细信息。最好的节省来自为您的用例选择合适的数据结构。我建议您使用有关哈希/列表/集合中存储内容的更多详细信息来更新您的问题。

答案 1 :(得分:0)

我们进行了以下配置,这有助于将内存占用减少40%

list-max-ziplist-entries 2048
list-max-ziplist-value 10000

list-compress-depth 1

set-max-intset-entries 2048

hash-max-ziplist-entries 2048
hash-max-ziplist-value 10000

此外,我们增加了Linux服务器上的RAM,这有助于我们解决Redis内存问题。