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

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

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

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


当前回答

如果你在windows机器上本地运行Redis,试着“以管理员身份运行”,看看它是否有效。对我来说,问题是Redis位于“程序文件”文件夹中,默认情况下会限制权限。这是应该的。

但是,不要以管理员身份自动运行Redis。你不会想要授予它更多的权限。你想按规矩办事。

因此,我们能够通过作为管理员运行它来快速识别问题,但这不是解决方法。一种可能的情况是,你把Redis放在一个没有写权限的文件夹中,结果DB文件被存储在同一个位置。

您可以通过打开redis.windows.conf并搜索以下配置来解决此问题:

    # The working directory.
    #
    # The DB will be written inside this directory, with the filename specified
    # above using the 'dbfilename' configuration directive.
    #
    # The Append Only File will also be created inside this directory.
    #
    # Note that you must specify a directory here, not a file name.
    dir ./

将dir ./更改为具有常规读写权限的路径

你也可以将Redis文件夹整体移动到一个你知道拥有正确权限的文件夹。

其他回答

遇到此错误,并且能够从日志中找出该错误是由于磁盘空间不足造成的。所有插入到我箱子里的数据都不再需要了。所以我试着冲洗马桶。由于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在执行以上步骤后不再运行。

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

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

如果你正在使用docker/docker-compose,并且想要阻止redis写入文件,你可以创建一个redis配置并挂载到容器中

docker.compose.override.yml

  redis:¬
      volumes:¬
        - ./redis.conf:/usr/local/etc/redis/redis.conf¬
      ports:¬
        - 6379:6379¬

您可以从这里下载默认配置

在redis.conf文件中,确保注释掉这3行

save 900 1
save 300 10
save 60 10000

您可以在这里查看更多删除持久数据的解决方案

感谢大家检查这个问题,显然错误是在bgsave期间产生的。

对我来说,在shell中输入config set stop-writes-on-bgsave-error no并重新启动Redis解决了这个问题。

是的,这是因为当前用户没有修改“dump.rdb”的权限。

因此,除了创建一个新的RDB文件,您还可以对旧文件授予权限(更改其所有权)。

在redis-cli中输入:

配置get dir

你会得到"/usr/local/var/db/redis"(这是redis写入数据的位置)

使用终端前往此位置

cd 
cd /usr/local/var/db

输入以下命令(使用我们的用户名):

sudo chown -R [username] db

这将改变为所有者。

这对我很有用。