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

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

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

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


当前回答

$ 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有足够的磁盘空间。

其他回答

在我绞尽脑汁思考了这么多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服务器。

macOS (brew): brew服务重启redis。 Linux: sudo service redis restart / sudo systemctl restart redis . sh Windows: Windows + R ->类型服务。msc,输入->搜索Redis,然后单击restart。

我个人在用Brew升级redis (Brew升级)后遇到了这个问题。 重启笔记本电脑后,它立即工作了。

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

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

遇到此错误,并且能够从日志中找出该错误是由于磁盘空间不足造成的。所有插入到我箱子里的数据都不再需要了。所以我试着冲洗马桶。由于redis-rdb-bgsave进程正在运行,因此也不允许FLUSH数据。我按照下面的步骤,并能够继续。

登录redis客户端 执行config set stop-writes-on-bgsave-error no 执行FLUSHALL(不需要存储的数据) 执行config set stop-writes-on-bgsave-error yes

进程redis-rdb-bgsave在执行以上步骤后不再运行。

我也面临着同样的问题。两个答案(被点赞最多的和被接受的)都只是暂时的解决办法。

此外,配置set stop-writes-on-bgsave-error no是一种可怕的忽略这个错误的方式,因为这个选项所做的是阻止redis通知写已经停止,并继续在快照中不写数据。这是简单地忽略这个错误。 请参考这个

至于在redis-cli的config中设置dir,当你重新启动redis服务时,这个问题也会被清除,并且会再次弹出相同的错误。在redis.conf中dir的默认值是。/,如果你以root用户启动redis,那么。/是/,写权限不被授予,因此会出现错误。

最好的方法是在redis.conf文件中设置dir参数,并对该目录设置适当的权限。大多数debian发行版都将它放在/etc/redis/redis.conf中