我有一个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数据会发生什么?
1条答案
按热度按时间kokeuurv1#
所以我的问题是,在一些数据已经写入Redis并因此持久化在RDB文件中之后,我如何才能启用AOF?
可以。您可以使用
config set appendonly yes
来启用AOF。但是内存中已经存在的数据呢?如果我的Redis服务器停止/失败,然后重新启动,AOF文件将只有部分数据,并且会有数据丢失。
一旦使用
config set
命令启用AOF,Redis就会在后台触发AOF重写作业,将内存中的所有数据写入AOF。因此,新创建的AOF文件具有所有数据,而不是部分数据,即没有数据丢失。