nosql - Redis - 没有办法从禁用 AOF 的环境迁移到启用 AOF 的环境吗?

标签 nosql redis

我的情况基本上是这样的:

1) 我最初在没有 AOF 的情况下启动了 Redis,并让它运行了 n 周。

2) 我决定要使用 AOF,因此我在 n+1 周后重新启动 Redis 并打开 AOF。

3) 我决定迁移到新服务器。因此,我安全关闭了当前的 Redis 进程,并将 RDB 文件和 AOF 文件复制到我的新服务器。

4) 当我在打开 AOF 的新服务器中启动 Redis 时,Redis 的默认行为是从 AOF 加载数据。 这意味着我前 n 周的数据丢失了。

当然,有一个明显的解决方案:在没有 AOF 的情况下启动 Redis,以便从 RDB 加载数据,然后在运行时打开 AOF。

但这几乎意味着如果您的 AOF 关闭了一段时间,就无法使用 AOF,并且只有从第一天起就连续使用 AOF,您才能使用 AOF .

这个理解正确吗?如果是这样,那么对于任何想要迁移到支持 AOF 的环境的人来说,这听起来毫无用处。一个没有迁移手段的系统听起来很蹩脚。

我在这里遗漏了什么吗?有没有办法将您过去的数据包含到 AOF 文件中?

我希望得到一些帮助,因为这会影响我在我的环境中是否需要 AOF 的决定。 (这意味着我无法体验到 AOF 的巨大好处...)

最佳答案

我认为您误解了 AOF 的工作原理。

AOF实际上是两种机制:

  • 重做日志记录机制,将所有写入操作附加到 AOF 文件
  • 后台重写操作,可以从内存内容生成 AOF 文件

后台重写操作由 Redis 定期触发,但您也可以使用 BGREWRITEAOF命令手动启动它。

现在,当通过“config set appendonly yes”命令动态打开 AOF 时,会自动触发重写操作,因此您可以确保所有现有数据都是生成的 AOF 文件的一部分。

你可以在aof.c文件中看到这段代码: https://github.com/antirez/redis/blob/unstable/src/aof.c#L192

在您描述的情况下,您应该在 AOF 文件中获取所有数据。

关于nosql - Redis - 没有办法从禁用 AOF 的环境迁移到启用 AOF 的环境吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250710/

相关文章:

mongodb - 有人用过 Aerospike 吗?它与 MongoDB 相比如何?

memory-management - 在 Redis 中建模数据

python - 对于 celery worker 来说,禁止八卦、交流和心跳会产生什么后果?

transactions - Redis 中的 RPUSH 和 LPUSH 可以赛跑吗?

python - 重复轮询列表以查看哪个作业已完成的最佳方法

mysql - 寻求帮助了解 Mongo DB 数据组织

mysql - 交易应用程序(如电子商务/汇款等)可以建立在没有 sql db 的基础上吗

json - Firebase 数据库 : how to compare two values

database - 视频流网站的最佳数据库是什么?

node.js - Redis multi 与 Bluebird promise