我的 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/。仅附加文件只是选项之一。
这不是一个坏的选项,它只需要一点维护,否则,正如您所发现的,它会使进程启动缓慢。了解这些选项及其优点/缺点,然后选择最适合您的使用模式的选项。