如何在已经运行的Redis上启用AOF而不会丢失数据?

ff29svar  于 2023-05-21  发布在  Redis
关注(0)|答案(1)|浏览(180)

我有一个Redis示例,运行时启用了snapshot,因此它的数据被持久化到RDB文件中。RDB文件有大约2GB的数据。
我想启用AOF。所以我尝试的第一个方法是这样的:我关闭了Redis服务器,启用了AOF,然后重启了Redis。我发现我以前备份在RDB文件中的所有数据都没有加载,因为一旦AOF被启用,Redis会加载AOF文件来恢复数据(在本例中是空的,因为我刚刚启用了它)。
所以我的问题是,在一些数据已经写入Redis并因此持久化在RDB文件中之后,我如何才能启用AOF
我知道我们可以启用AOF,而不必通过CONFIG SET命令从redis-cli本身停止Redis,我的数据将保留在Redis的内存中,但是内存中已经存在的数据怎么办?如果我的Redis服务器停止/失败,然后重新启动,AOF文件将只有部分数据,并且会有数据丢失。

示例场景:
Day 1:我已经启动了Redis,并开启了快照。
Day 2:我在Redis内存中有一些5GB的数据,在RDB文件中也有同样的5GB。
Day 3:通过redis-cli开启AOF,不重启redis。
Day 4:AOF文件收到500多条命令,Redis失败。

我现在需要重新启动我的Redis,当我重新启动时,数据将从AOF文件中恢复。但是AOF文件只有在Day 3之后才有命令。之前在我的Redis内存中直到第2天的5GB数据会发生什么?

kokeuurv

kokeuurv1#

所以我的问题是,在一些数据已经写入Redis并因此持久化在RDB文件中之后,我如何才能启用AOF?
可以。您可以使用config set appendonly yes来启用AOF。
但是内存中已经存在的数据呢?如果我的Redis服务器停止/失败,然后重新启动,AOF文件将只有部分数据,并且会有数据丢失。
一旦使用config set命令启用AOF,Redis就会在后台触发AOF重写作业,将内存中的所有数据写入AOF。因此,新创建的AOF文件具有所有数据,而不是部分数据,即没有数据丢失。

相关问题