上下文描述
我的 Linux 发行版包含 redis-server 6.0.5。 Redis 配置为使用持久性AOF
(仅附加文件),并且RDB
持久性被禁用。
启动时,脚本请求 redis-server 执行BGREWRITEAOF
命令。此请求启动一个进程(带有 PID= ),该进程在写入文件的同一数据 Redis 路径中<pid>
创建一个文件。temp-rewriteaof-<pid>.aof
appendonly.aof
这是命令的正常工作BGREWRITEAOF
。该命令的实用性已由其所写内容证明这个帖子。
有什么问题
BGREWRITEAOF
当系统在未完成的情况下关闭时就会出现问题。在这种情况下,该文件temp-rewriteaof-<pid>.aof
在重新启动时仍然存在,并且占用磁盘空间。
因为系统随时都可能关闭,所以我冒着磁盘已满的风险。
在我看来,解决此问题的唯一方法是创建一个脚本,temp-rewriteaof-*.aof
从数据 Redis 文件夹中删除所有文件。
问题
有人知道更好的解决方案吗? Redis 有一个干净的解决这个问题的程序/命令?
答案1
Redis-server 没有复杂的方法来管理其运行的服务器上的磁盘空间。它管理自己的 RDB 快照文件和 AOF 文件(如您所描述的)。然而,管理因计算机停止而中断的前一个进程创建的文件并不是 Redis 所做的事情。
我建议您在编写的启动时脚本中添加一个例程,用于将BGREWRITEAOF
命令发送到 Redis 服务器。该例程将清除上次服务器停止留下的任何陈旧的临时 AOF 文件。这是执行此例程的好地方 - 脚本已经与 AOF 文件管理相关,并且启动时间是通过清理陈旧文件为计算机接下来的几个小时/几天的运行(并消耗磁盘空间)做准备的适当时间。