想象一下Redis Cluster的设置,或者只是通常的分片设置,我们每个物理节点有N> 1个Redis进程 . 我们所有的进程都有相同的redis.conf,并在那里使用相同的SAVE周期启用了SAVE选项 . 因此,如果我们所有的主要Redis进程同时启动 - 它们将在同一时间或周围开始保存 . 当我们有9个Redis进程并且它们全部在同一时间启动RDB快照时:

  • 影响性能,因为我们使9个分叉进程开始消耗CPU并同时执行IO .

  • 需要太多保留的额外内存,不能用作实际存储,因为在写入量大的应用程序中,Redis可能会使用快照期间通常使用的内存的2倍 . 所以...如果我们想要在这个节点上使用100Gb的redis进程 - 我们应该在同一时间额外分配100Gb来保证所有进程的安全性 .

是否有任何最佳实践来修改此设置并使Redis进程逐个开始保存或至少进行一些随机化?

我只有一个想法,即在redis.conf中禁用调度并编写cron脚本,它将逐步开始保存时滞 . 但是这个解决方案看起来像黑客,它应该是其他一些做法 .