有三个选项:
每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全 。
每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据 。
从不 fsync :将数据交给操作系统来处理 。更快,也更不安全的选择 。
推荐(并且也是默认)的措施为每秒 fsync 一次,这种 fsync 策略可以兼顾速度和安全性 。
总是 fsync 的策略在实际使用中非常慢,即使在 Redis 2.0 对相关的程序进行了改进之后仍是如此 —— 频繁调用 fsync 注定了这种策略不可能快得起来 。
如果 AOF 文件出错了,怎么办?
服务器可能在程序正在对 AOF 文件进行写入时停机,如果停机造成了 AOF 文件出错(corrupt),那么 Redis 在重启时会拒绝载入这个 AOF 文件,从而确保数据的一致性不会被破坏 。
当发生这种情况时,可以用以下方法来修复出错的 AOF 文件:
- 为现有的 AOF 文件创建一个备份 。
- 使用 Redis 附带的 redis-check-aof 程序,对原来的 AOF 文件进行修复 。
- $ redis-check-aof --fix
- (可选)使用 diff -u 对比修复后的 AOF 文件和原始 AOF 文件的备份,查看两个文件之间的不同之处 。
- 重启 Redis 服务器,等待服务器载入修复后的 AOF 文件,并进行数据恢复 。
AOF 重写和 RDB 创建快照一样,都巧妙地利用了写时复制机制 。
以下是 AOF 重写的执行步骤:
- Redis 执行 fork(),现在同时拥有父进程和子进程 。
- 子进程开始将新 AOF 文件的内容写入到临时文件 。
- 对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾: 这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的 。
- 当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾 。
- 搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾 。
文章插图
图片来源于网络,侵删 。
回到顶部
vRDB和AOF合讲
? RDB VS AOF,选哪个好?
一般来说,如果想达到足以媲美 PostgreSQL 的数据安全性,你应该同时使用两种持久化功能 。
如果你非常关心你的数据,但仍然可以承受数分钟以内的数据丢失,那么你可以只使用 RDB 持久化 。
有很多用户都只使用 AOF 持久化,但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份,并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快,除此之外,使用 RDB 还可以避免之前提到的 AOF 程序的 bug。
怎么从 RDB 持久化切换到 AOF 持久化
在 Redis 2.2 或以上版本,可以在不重启的情况下,从 RDB 切换到 AOF :
- 为最新的 dump.rdb 文件创建一个备份 。
- 将备份放到一个安全的地方 。
- 执行以下两条命令:
- 确保命令执行之后,数据库的键的数量没有改变 。
- 确保写命令会被正确地追加到 AOF 文件的末尾 。
步骤 3 执行的第二条命令用于关闭 RDB 功能 。这一步是可选的,如果你愿意的话,也可以同时使用 RDB 和 AOF 这两种持久化功能 。
别忘了在 redis.conf 中打开 AOF 功能! 否则的话,服务器重启之后,之前通过 CONFIG SET 设置的配置就会被遗忘,程序会按原来的配置来启动服务器 。
? RDB 和 AOF 之间的相互作用
在版本号大于等于 2.4 的 Redis 中,BGSAVE 执行的过程中,不可以执行 BGREWRITEAOF。反过来说,在 BGREWRITEAOF 执行的过程中,也不可以执行 BGSAVE。
这可以防止两个 Redis 后台进程同时对磁盘进行大量的 I/O 操作 。
如果 BGSAVE 正在执行,并且用户显示地调用 BGREWRITEAOF 命令,那么服务器将向用户回复一个 OK 状态,并告知用户,BGREWRITEAOF 已经被预定执行: 一旦 BGSAVE 执行完毕,BGREWRITEAOF 就会正式开始 。
当 Redis 启动时,如果 RDB 持久化和 AOF 持久化都被打开了,那么程序会优先使用 AOF 文件来恢复数据集,因为 AOF 文件所保存的数据通常是最完整的 。
推荐阅读
- 为什么分布式一定要有Redis?
- 如何设计数据库:淘宝商品数据库设计的一些经验
- 茶叶大数据颠覆你的认知 喝不喝茶的都看看
- 抖音运营如何分析对标账号,对标账号我们都需要分析哪些数据
- 2021抖音电商年度数据
- 洗茶真的不科学 实验数据告诉你 事实就是如此残酷
- Excel录入数据防止出错,设置自动限制的技巧
- 人工智能算法是如何从数据中学习规律的
- 只要10分钟,教你配置出炫酷的数据可视化大屏
- mysql数据库 InnoDB崩溃恢复机制总结