Memory Redis内存优化建议

Memory Redis内存优化建议,memory,optimization,hash,redis,set,Memory,Optimization,Hash,Redis,Set,我有一个Redis主人和两个奴隶。所有3个当前都在同一个unix服务器上。3个实例使用的内存约为3.5 G、3 G、3G。redis数据库中大约有275000个密钥。大约4000个是散列。1组有100000个值。1个列表中有275000个键。这是一个散列和集合的列表。服务器的总内存为16 GB。目前使用的是9.5 GB。持久性当前处于关闭状态。rdb文件通过强制后台保存每天写入一次。请提供任何优化建议。最大ziplist配置是当前默认值。优化哈希 首先,让我们看看散列。两个重要的问题-每个哈希中

我有一个Redis主人和两个奴隶。所有3个当前都在同一个unix服务器上。3个实例使用的内存约为3.5 G、3 G、3G。redis数据库中大约有275000个密钥。大约4000个是散列。1组有100000个值。1个列表中有275000个键。这是一个散列和集合的列表。服务器的总内存为16 GB。目前使用的是9.5 GB。持久性当前处于关闭状态。rdb文件通过强制后台保存每天写入一次。请提供任何优化建议。最大ziplist配置是当前默认值。

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

len(hash)

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

优化集 无法优化100000的集合,除非您提供有关用例的其他详细信息。不过,有些一般策略:

  • 可能使用HyperLogLog-是否使用集合来计算唯一元素?如果您运行的唯一命令是
    sadd
    scard
    ,那么您可能应该切换到hyperloglog
  • 可能使用Bloom Filter-是否使用集合检查成员的存在?如果您运行的唯一命令是
    sadd
    sismember
    ,那么您可能应该实现一个bloom过滤器,并使用它而不是set
  • 每个元素有多大集合成员应该很小。如果您存储的是大对象,那么您可能做了一些不正确的事情
  • 优化列表
  • 一份27.5万人的名单似乎是错误的。访问列表中心的元素会很慢。您确定列表是适合您的用例的正确数据结构吗
  • 将列表压缩深度更改为1或更高。请阅读中的有关此设置的信息-存在权衡。但是对于275000个元素的列表,您当然希望启用压缩
  • 工具 使用开放源代码分析您的数据集(免责声明:我是此工具的作者)。它会告诉你每把钥匙占用了多少内存。它将帮助你决定在哪里集中精力

    你也可以参考这个

    还有什么?
    您提供的用例细节很少。最好的节约来自为您的用例选择正确的数据结构。我鼓励您更新您的问题,提供更多关于您在哈希/列表/集中存储的内容的详细信息。

    我们进行了以下配置,这有助于将内存占用减少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内存问题。

    将主服务器及其从属服务器托管在同一台服务器上有什么意义?是的,这是一个很好的观点。最初我们没有很多可用的服务器,因此我们在同一台服务器上设置了3个实例。但是现在我们已经将2个从属实例移到了不同的服务器上。谢谢!!这很有帮助!!