为什么 redis-server 在启动时需要很长时间才能将数据库加载到内存中?

为什么 redis-server 在启动时需要很长时间才能将数据库加载到内存中?

我的 Linux 发行版使用该redis数据库。启动时redis-server需要大约 80 秒来加载数据集。以下是显示我所写内容的日志:

redis-server[249]: 249:M 17 Oct 2022 16:29:55.173 * DB loaded from append only file: 79.442 seconds

如果 Python 程序在完成内存加载操作之前尝试查询数据库redis-server,则会引发 Exception: redis.exceptions.BusyLoadingError
异常描述是:Redis is loading the dataset in memory并且符合我所描述的上下文(即数据库正在内存中加载数据)。

redis-server因为我此时使用的是默认配置,所以我不知道 . 使用的持久性类型到底是什么redis-server
该文件redis.conf很长,因此,在这里,我报告我认为最重要的设置:

...
########################### 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.

# OE: tune for a small embedded system with a limited # of keys.
save 120 1
save 60 100
save 30 1000

######################### APPEND ONLY MODE #########################
# OE: changed default to enable this
appendonly yes

# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
...

这些设置(特别是appendonly yes)似乎表明数据库使用的持久性类型是:( Append Only File) AOF。我认为这些设置导致加载时间过长。

是否可以使用避免启动时加载时间过长的设置?

答案1

这很可能是因为您的 redis-server 进程被配置为使用仅附加文件,而您从未发送过该BGREWRITEAOF命令。

redis.io 网站上的 Redis 手册对四种不同的持久性(数据恢复)配置进行了很好的描述: https://redis.io/docs/manual/persistence/。仅附加文件只是选项之一。

这不是一个坏的选项,它只需要一点维护,否则,正如您所发现的,它会使进程启动缓慢。了解这些选项及其优点/缺点,然后选择最适合您的使用模式的选项。

相关内容