Redis快照重载内存

时间:2016-01-24 10:48:17

标签: redis

我正在使用redis作为客户端缓存机制。 使用stackexchange.redis使用C#实现。 我将快照配置为“保存5 1”并启用rdbcompression。 每次需要附加数据时,RDB机制都会将rdb文件加载到内存中。 问题是当你有一个相当大的RDB文件并且它一次性加载到内存。它扼杀了平均端点的内存,磁盘和CPU。

有没有办法更新rdb文件而不将整个文件加载到内存? 另外,任何其他降低内存和CPU负载的解决方案都是受欢迎的。

2 个答案:

答案 0 :(得分:3)

  

每次需要附加数据时,RDB机制都会将rdb文件加载到内存中。

这不是开源Redis服务器的作用(其他变体,例如MSFT fork,可能表现不同) - 通过使用分叉进程将内存内容复制到磁盘来创建RDB。除非用于恢复,否则永远不会加载转储文件。保存过程中增加的内存使用量取决于由于写时复制(COW)机制而在转储过程中执行的写入量。

  

还欢迎任何其他降低内存和CPU负载的解决方案。

根据您的要求和预算,有几种方法可以解决这个问题。其中包括:

  • 将RDB和AOF用于数据持久性,从而减少转储频率。
  • 将持久性委托给从属实例。
  • 对数据库进行分片并执行级联转储。

答案 1 :(得分:0)

我们使用RDB解决了这个问题,现在只使用AOF。 我们通过降低auto-aof-rewrite-percentage来减少内存峰值,并将auto-aof-rewrite-min-size限制为所需的大小。