为什么 Redis 无法使用默认配置启动?

为什么 Redis 无法使用默认配置启动?

我正在运行 Ubuntu 18(好吧,实际上是带有 Ubuntu 18 发行版的 Windows Linux 子系统)。我已经安装了 redis 4.0.9。如果我在未指定任何配置的情况下启动它,它会正常运行:

redis-server

在此处输入图片描述

但是,如果我使用安装的默认配置文件启动它,它会引发错误: 在此处输入图片描述 在此处输入图片描述

为什么会这样?我之前修改了默认配置,但后来我使用 --purge 卸载并重新安装了 redis-server 以恢复原始默认配置。但错误仍然存​​在。

您可以在这里看到给我带来麻烦的已加载配置:https://defuse.ca/b/g4wHiT0SlX0AUcpuSpgx3v

附言

我意识到 StackOverflow 上可能有更好的论坛,因为这里只有几百个关于 redis 的问题,而那里有超过 15,000 个,所以我把这个问题发了出来。抱歉重复了。

答案1

看起来您正在从不同的服务器或不同的配置恢复 RDB,并且数据类型不匹配,或者没有 ReJSON-RL 就无法解释。如果是这种情况,只需在服务器启动时传递所需的模块,它就可以工作。如下所示

redis-server --loadmodule /path/to/module/rejson.so

答案2

感谢 Itamar Haber 和 asktyagi 的评论/回答,我想我已经弄清楚到底发生了什么。

当我之前使用该ReJSON模块时,它会将一些数据写入数据库。默认情况下,Redis 会不时将其数据备份到磁盘(我错误地认为它完全在 RAM 中运行)。因此,一旦我恢复到原始配置并停止使用该模块,Redis 就无法启动并从备份中恢复,因为它无法解析现在丢失的模块留下的数据。因此出现错误。

卸载并重新安装没有帮助的原因是,新的 Redis 安装仍会找到上次安装留下的备份文件并尝试恢复该数据。该文件位于dump.rdb我的主目录中。也许在卸载期间脚本将其从 Redis 工作目录移到那里,而另一个脚本在安装期间将其还原到 Redis 工作目录?因此,为了让 Redis 恢复正常,我想我必须执行以下任何一项操作:

  1. 移动/删除文件dump.rdb,这样就没有数据可以恢复
  2. 使用写入数据的模块启动Redis
  3. 无需配置即可启动 Redis,或者无法找到配置dump.rdb

以下是配置的相关部分。它展示了 Redis 如何通过其默认配置找到之前安装的数据转储

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000

# The filename where to dump the DB
dbfilename dump.rdb

# 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 /var/lib/redis

感谢大家的帮助。真希望我早点解决这个问题;最后我沮丧地删除了操作系统,从头开始。

相关内容