我正在运行 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 恢复正常,我想我必须执行以下任何一项操作:
- 移动/删除文件
dump.rdb
,这样就没有数据可以恢复 - 使用写入数据的模块启动Redis
- 无需配置即可启动 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
感谢大家的帮助。真希望我早点解决这个问题;最后我沮丧地删除了操作系统,从头开始。