在写入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)

其他回答

在redis.conf第235行,让我们像这样修改配置

- stop-writes-on-bgsave-error yes
+ stop-writes-on-bgsave-error no

在我的例子中,原因是磁盘的可用空间非常低(只有35 Mb)。我做了以下的事情

停止所有Redis相关进程 删除磁盘中的一些文件,以腾出足够的空间 删除redis转储文件(如果不需要现有数据) Sudo rm /var/lib/redis/* 删除所有现有数据库的所有键 Sudo redis-cli flushall 重新启动所有芹菜任务,并检查相应的日志是否有任何问题

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

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

$ redis-cli

设置stop-writes-on-bgsave-error no

根据Redis文档,只有当您没有启用RDB快照或您不关心快照中的数据持久性时,才建议这样做。

默认情况下,如果RDB快照启用(至少一个保存点)并且最近的后台保存失败,Redis将停止接受写入。这将使用户意识到(以一种艰难的方式)数据没有正确地保存在磁盘上,否则,强文本的机会是没有人会注意到,并且会发生一些灾难。”

你应该做的是:

# redis-cli
127.0.0.1:6379> CONFIG SET dir /data/tmp
OK
127.0.0.1:6379> CONFIG SET dbfilename temp.rdb
OK
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379>

请确保/data/tmp有足够的磁盘空间。

如果您正在运行MacOS,并且最近升级到Catalina,您可能需要按照本问题的建议运行brew服务重新启动redis。