在Redis仍在运行时Redis /创建新的.rdb文件

时间:2015-12-11 22:19:01

标签: redis

我使用Redis,今天我开始得到以下异常:

Can't save in background: fork: Cannot allocate memory

据我所知,出现此错误是因为我的数据库太大,并且此进程没有内存。

所以我开始删除表格,但问题是Redis没有成功将它写入光盘,并且面对它并不知道这些变化。

我决定创建新的.rdb文件(在/etc/redis.config中),然后使用新的RDB文件更改文件路径:

dbfilename dump_cache_new.rdb

然后,我将重新加载对我来说至关重要的所有数据(我可以这样做 - 从我的文件系统中获取数据),然后重新启动redis服务。

问题在于我无法创建此文件,因为redis现在正在使用旧路径执行(并且Redis必须运行,因为其他进程会从中获取一些关键数据)。

如何创建此dump_cache_new.rdb文件,而redis仍在使用旧路径运行?

1 个答案:

答案 0 :(得分:0)

如果要在正在运行的Redis实例上更改快照文件名(或大多数其他配置参数),请使用CONFIG SET命令。基于该文档页面,看起来dirdbfilename都是可以在实例上设置的参数。

另一个需要考虑的选择是使用同步SAVE命令,该命令不需要fork。

  

您几乎从不想在生产环境中调用SAVE,因为它会阻止所有其他客户端。相反通常使用BGSAVE。但是,如果出现阻止Redis创建后台保存子项的问题(例如fork(2)系统调用中的错误),SAVE命令可能是执行最新数据集转储的最后手段。

这是一项非常严格的操作,但是如果您已经在转储数据以使保存工作,那么至少可以让您首先制作快照。