redis - Redis AOF 重写文件和 RDB 一样吗?
问题描述
我发现如果在 AOF 重写和 RDB 保存后没有执行新的写入操作。生成的 AOF 文件与 RDB 文件相同。那是对的吗?
而redis为什么会选择迭代数据库的方式来重写AOF呢?这意味着程序每次开始 AOF 重写时都应该迭代数据库。上次的 AOF 重写对当前的 AOF 重写没有帮助。当数据库很大时,这种重写可能会花费太多时间。
在我看来,真正重写 AOF 文件可能会更好。从上次 AOF-rewrite 的结束位置开始,重写后面的 AOF 步骤。我知道这样做可能会在重新构建 redis 数据库时失去一些性能。这种方式还有其他问题吗?
解决方案
我发现如果在 AOF 重写和 RDB 保存后没有执行新的写入操作。生成的 AOF 文件与 RDB 文件相同。那是对的吗?
是的
从上次AOF-rewrite的结束位置开始,重写以下AOF步骤
假设用户SET
在第一次 AOF 重写之前调用 100 万条命令来设置 100 万个键。然后用户在第二次 AOF 重写之前调用 100 万DEL
条命令来删除这些键。如果你从上次 AOF 重写的末尾开始,你的 AOF 文件将包含 200 万条无用的记录。此外,您的 AOF 会越来越大,直到磁盘已满,重新加载这么大的 AOF 文件会很慢。
推荐阅读
- html - 表格单元格内的工具提示时出现 CSS z-index 问题
- python - 如何在 Pandas 数据框中的列上应用格式
- python - 如何基于一列相对于另一列绘制多个子图?
- resteasy - 使用 resteasy 设置相同站点的 cookie 属性
- r - 如何在 r 中读取 .wk1 文件?
- c# - 类型参数的可空性属性 (C#)
- python - 我正在尝试使用 python 脚本在页面中查找特定链接
- loops - Zsh 行为直到循环变量行为
- react-native - 无法在带有嵌套导航器的本机应用程序上注销?
- mysql - Netbeans如何修复用户'root'@'localhost'的访问被拒绝