选择redis maxmemory size和BGSAVE memory usage

选择redis maxmemory size和BGSAVE memory usage,memory,redis,Memory,Redis,我试图找出在以下情况下“maxmemory”的安全设置: 写繁重的应用程序 8GB内存 让我们假设其他进程占用大约1GB 这意味着redis进程的内存使用量永远不会超过7GB 每次BGSAVE事件的内存使用量都会翻倍,因为: 在redis中,关于BGSAVE事件中内存使用量的增加,如下所述: 如果您在写容量非常大的应用程序中使用Redis,在磁盘上保存RDB文件或重写AOF日志时,Redis可能会使用高达正常使用内存2倍的内存 maxmemory限制大致与redis cli信息中的“已用内

我试图找出在以下情况下“maxmemory”的安全设置:

  • 写繁重的应用程序
  • 8GB内存
  • 让我们假设其他进程占用大约1GB
  • 这意味着redis进程的内存使用量永远不会超过7GB
  • 每次BGSAVE事件的内存使用量都会翻倍,因为:
在redis中,关于BGSAVE事件中内存使用量的增加,如下所述:

如果您在写容量非常大的应用程序中使用Redis,在磁盘上保存RDB文件或重写AOF日志时,Redis可能会使用高达正常使用内存2倍的内存

  • maxmemory限制大致与redis cli信息中的“已用内存”进行比较(如前所述),不考虑redis使用的其他内存
在这种情况下,这意味着maxmemory设置不应高于(8GB-1GB)/2=3.5GB,对吗


如果是这样,我将为redis文档创建一个pull请求,以更清楚地反映这一点。

在这种情况下,我建议限制为3GB。是的,这些文档非常正确,运行bgsave将在短期内使内存需求翻倍。但是,我更愿意为系统保留2GB的内存,或者为持久化主机保留最大内存的40%

您表示您有一个非常重写的应用程序。在这种情况下,我强烈建议另一台服务器执行保存操作。我发现在高写操作和BGS存储期间,客户机的响应时间可能会变得很高。这不是Redis本身造成的,而是服务器本身的响应。虚拟机尤其如此。在此设置下,您将使用第二台服务器从主服务器进行从属并保存到磁盘,而第一台服务器保持响应