我使用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仍在使用旧路径运行?
答案 0 :(得分:0)
如果要在正在运行的Redis实例上更改快照文件名(或大多数其他配置参数),请使用CONFIG SET
命令。基于该文档页面,看起来dir
和dbfilename
都是可以在实例上设置的参数。
另一个需要考虑的选择是使用同步SAVE
命令,该命令不需要fork。
您几乎从不想在生产环境中调用SAVE,因为它会阻止所有其他客户端。相反通常使用BGSAVE。但是,如果出现阻止Redis创建后台保存子项的问题(例如fork(2)系统调用中的错误),SAVE命令可能是执行最新数据集转储的最后手段。
这是一项非常严格的操作,但是如果您已经在转储数据以使保存工作,那么至少可以让您首先制作快照。