在写入Redis (SET foo bar)期间,我得到以下错误:

MISCONF Redis被配置为保存RDB快照,但当前为 无法在磁盘上持久保存。可能修改数据集的命令是 禁用。有关错误的详细信息,请查看Redis日志。

基本上我理解的问题是,redis是不能在磁盘上保存数据,但不知道如何摆脱这个问题。

下面的问题也有同样的问题,它在很久以前就被抛弃了,没有答案,很可能没有尝试解决这个问题。


当前回答

在我绞尽脑汁思考了这么多so问题之后,终于 对我来说,@Axel Advento的回答奏效了,但没有额外的步骤- 我仍然面临许可问题。 我必须切换用户到redis,在它的home目录中创建一个新目录,然后将其设置为redis的目录。

sudo su - redis -s /bin/bash
mkdir redis_dir
redis-cli CONFIG SET dir $(realpath redis_dir)
exit # to logout from redis user (optional)

其他回答

在我的例子中,它与磁盘空闲空间有关。(你可以用df -h bash命令检查它)当我释放一些空间时,这个错误消失了。

如果您在Linux机器上工作,还要重新检查数据库的文件和文件夹权限。

数据库和它的路径可以通过以下方式获得:

在redis-cli:

CONFIG GET dir 配置dbfilename

在命令行中ls -l。目录的权限应为755,文件的权限应为644。此外,通常redis-server作为用户redis执行,因此通过执行sudo chown -R redis:redis /path/to/rdb/folder,给用户redis文件夹的所有权也是很好的。在这里的回答中已经详细说明了这一点。

由于内存不足,bgsave过程中可能会出现错误。试试这个(从redis后台保存FAQ)

echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

请注意,当您的服务器受到攻击时,将出现此错误。刚刚发现redis无法写入'/etc/cron。D /web',在修改权限后,添加了包含挖掘算法和一些隐藏选项的新文件。

如果你遇到错误,一些重要的数据不能被丢弃在运行的redis实例上(rdb文件或其目录的权限不正确,或运行出磁盘空间),你总是可以重定向rdb文件写入其他地方。

使用redis-cli,你可以这样做:

CONFIG SET dir /tmp/some/directory/other/than/var
CONFIG SET dbfilename temp.rdb

在此之后,您可能想要执行BGSAVE命令,以确保数据将被写入rdb文件。确保当你执行INFO持久化时,bgsave_in_progress已经是0,rdb_last_bgsave_status是ok。在此之后,您现在可以开始在安全的地方备份生成的rdb文件。