Redis持久化方式之「RDB & AOF」

Redis 和 Memcached都是缓存数据库,不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持两种不同的持久化操作。
Redis 的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file, AOF)

RDB

Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持两种不同的持久化操作。

Redis 的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file, AOF)

快照:在指定的时间间隔内,将内存中的数据集快照写入磁盘,当恢复时,是将快照文件直接读到内存中。

Redis 会单独创建(fork)一个子进程来进行持久化(父进程继续处理客户端请求),会先将数据写到一个临时文件中,等持久化过程结束了,再用这个临时文件替换掉上次持久化好的文件。整个过程中,主进程是不进行任何 IO 操作的,这就确保了极高的性能。如果需要大规模数据的恢复,且对于数据恢复的完整性不是那么敏感,那么 RDB 方式要比 AOF 更加有效。RDB 的缺点是最后一次持久化后的数据可能会丢失。我们默认的就是 RDB,一般情况下不需要修改这个配置。

RDB 保存的文件是 dump.rdb

触发机制

  1. save 的规则满足的情况下,会自动触发 RDB 规则。比如 save 900 1 ,只要我们在900秒内修改了一次,就会触发持久化机制;

  2. 执行 flashall 命令;

  3. 执行 SHUTDOWN退出 Reids 时 。

触发 RDB 机制后,便多出一个 dump.rdb 文件(在生产环境中我们一般会将此文件备份)。

如何恢复 RDB 文件?

只需要将 RDB 文件放入 Redis 的启动目录中即可,Redis 启动时会自动检查 dump.rdb 文件,恢复其中的数据。

优点

  1. 适合大规模的数据恢复,与 AOF 相比会更快;
  2. 对数据的完整性要求不高。

缺点

  1. 需要一定的时间间隔进行操作,如果 Redis 意外宕机了,最后一次修改的数据可能就没了;
  2. fork 进程的时候,会占用一定的内存空间。

AOF

将所有命令都记录下来(有个 history文件),恢复的时候将该文件全部执行一遍。

以日志的形式记录每个写操作,将所有执行过的指令记录下来(读操作不记录),只许追加文件,但不许改写文件,Redis 启动之初会读取该文件重新构建数据。

AOF 保存的是 appendonly.aof 文件

如果该文件有错误,Redis 是启动不了的,我们就需要修复该文件。

Redis 提供了一个工具 redis-check-aof --fix来修复它:

redis-check-aof --fix appendonly.aof

优点

  1. 每一次修改都同步,文件的完整性会更好;
  2. 开启每秒同步一次,可能会丢失一秒的数据;
  3. 开启从不同步,效率是最高的。

缺点

  1. AOF文件 远远大于 RBD,修复的速度也比 RDB 慢;
  2. AOF 运行效率也要比 RDB 慢,所以 Redis 默认的配置就是 RDB。

重写规则说明

AOF 默认的是文件的无限追加,这样的话文件会越来越大。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64m

Redis 会记录上次文件的大小。

如果 AOF 文件过大(大于64m),将会 fork 一个新的进程程将文件重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值