我正在使用redis作为客户端缓存机制。 使用stackexchange.redis使用C#实现。 我将快照配置为“保存5 1”并启用rdbcompression。 每次需要附加数据时,RDB机制都会将rdb文件加载到内存中。 问题是当你有一个相当大的RDB文件并且它一次性加载到内存。它扼杀了平均端点的内存,磁盘和CPU。
有没有办法更新rdb文件而不将整个文件加载到内存? 另外,任何其他降低内存和CPU负载的解决方案都是受欢迎的。
答案 0 :(得分:3)
每次需要附加数据时,RDB机制都会将rdb文件加载到内存中。
这不是开源Redis服务器的作用(其他变体,例如MSFT fork,可能表现不同) - 通过使用分叉进程将内存内容复制到磁盘来创建RDB。除非用于恢复,否则永远不会加载转储文件。保存过程中增加的内存使用量取决于由于写时复制(COW)机制而在转储过程中执行的写入量。
还欢迎任何其他降低内存和CPU负载的解决方案。
根据您的要求和预算,有几种方法可以解决这个问题。其中包括:
答案 1 :(得分:0)
我们使用RDB解决了这个问题,现在只使用AOF。 我们通过降低auto-aof-rewrite-percentage来减少内存峰值,并将auto-aof-rewrite-min-size限制为所需的大小。