如果我们在redis.conf文件中启用了AppendFileOnly,那么每个更改redis数据库的操作都会被记录在该文件中。
现在,假设Redis已经使用了" maxmemory"中分配给它的所有内存。在redis.conf文件中指向。
要存储更多数据,它会开始通过redis.conf文件中指定的任何一种行为(volatile-lru,allkeys-lru等)删除数据。
假设一些数据从主内存中删除,但它的日志仍然在AppendOnlyFile中(如果我错了,请纠正我)。我们可以使用此AppendOnlyFile获取该数据吗?
简单地说,我想问一下,如果有什么办法我们可以将删除的数据放回主内存中?我们可以将数据存储到磁盘存储器中,并在需要时将数据加载到主存储器中。
答案 0 :(得分:2)
我从谷歌小组那里得到了这个答案。我正在分享它。
- - - - >
键的驱逐作为显式DEL命令记录在AOF中,所以当 文件重播完全保持一致性。
AOF仅在 用于在重新启动后恢复数据集,而不是 Redis用于提供数据。如果密钥仍然存在于其中(使用 随后驱逐DEL),“恢复”它的唯一方法是手动 编辑AOF以删除相应的删除并重新启动 服务器。
- - - - >另一个答案
AOF,顾名思义,是附加到的文件。当遇到删除记录时,它不是Redis搜索并删除创建记录的数据库。在我看来,这对于太少的收益来说太过分了。
如前所述,重写AOF的配置(请参阅BGREWRITEAOF命令作为一个示例)将擦除已删除的AOF中的任何键,现在您无法从AOF文件中恢复这些键。 AOF不是恢复已删除密钥的最佳媒介。它旨在恢复崩溃前存在的数据库 - 没有任何已删除的密钥。
如果您希望能够在删除数据后恢复数据,则需要另外一种备份。更有可能是一个快照(RDB)文件,该文件已使用保存的日期/时间进行归档。如果您了解到需要恢复数据,请从知道密钥存在的时间开始选择快照文件,将其加载到单独的Redis实例中,然后使用RESTORE或GET或类似命令检索密钥。如前所述,可以解析RDB或AOF文件内容以从中提取数据,而无需将文件加载到正在运行的Redis实例中。这种方法的缺点是这些工具与Redis代码是分开的,并且可能并不总是像Redis服务器那样理解文件数据格式的变化。您可以根据所需的速度和可靠性来决定采用哪种方法。
答案 1 :(得分:0)
但它的日志仍然会出现在AppendOnlyFile中(如果我错了,请更正我)。我们可以使用此AppendOnlyFile获取该数据吗?
不,你无法获得数据。当Redis驱逐密钥时,它还会向AOF
添加删除命令。重写AOF
后,有关被驱逐密钥的任何内容都将被删除。
不,你不能这样做。您必须使用另一个持久数据存储(例如如果有任何方法我们可以将删除的数据恢复到主内存中?我们可以将数据存储到磁盘存储器中,并在需要时将数据加载到主存储器中。
Mysql
,Mongodb
)将数据保存到磁盘,并使用Redis作为缓存。