Redis 持久化策略

Redis提供两种持久化方式:一种是默认的RDB持久化方式,另一种是AOF(append only file)持久化方式

一、 RDB

是什么?

RDB是通过创建快照的方式进行持久化,保存某个时间点的全部数据,RDB是Redis默认的持久化方案,原理是Redis会通过单独创建(fork)一个与当前进程一模一样的子进程来进行持久化,这个子进程的所有数据(变量、环境变量、程序计数器等)都和原进程一模一样,会先将数据写入到一个临时文件中,待持久化结束了,再用这个临时文件替换上次持久化好的文件,整个过程冲,主进程不进行任何的io操作,这就确保了极高的性能。

1、持久化文件在哪

启动redis-server 的目录下

2、什么时候fork子进程,或者什么时候触发 rdb持久化机制

RDB 方式持久化数据是通过 fork 子进程,在子进程中进行数据同步

shutdown时,如果没有开启aof,会触发配置文件中默认的快照配置 执行命令 save 或者 bgsave save是只管保存,不管其他,全部阻塞,使用主进程进行持久化 bgsave redis 会在后台异步进行快照操作,同时可以响应客户端的请求

3、优点

存储紧凑,节省内存空间 恢复速度快 适合全量备份,全量复制的场景,经常用于灾难恢复(对数据的完整性和一致性要求较低)

4、缺点

容易丢失数据,两次数据快照备份之间如果出现故障,则会丢失期间产生或修改的数据 通过 fork 子进程对内存快照进行全量备份,频繁执行性能消耗较大

  • 手动触发

    1. save, 在命令行执行save命令,将以同步的方式创建rdb文件保存快照,会阻塞服务器的主进程,生产环境中不要用
    2. bgsave, 在命令行执行bgsave命令,将通过fork一个子进程以异步的方式创建rdb文件保存快照,除了fork时有阻塞,子进程在创建rdb文件时,主进程可继续处理请求
  • 自动触发

    1. 在redis.conf中配置​​save m n​​​ 定时触发,如​​save 900 1​​表示在900s内至少存在一次更新就触发
    2. 主从复制时,如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点
    3. 执行debug reload命令重新加载Redis时
    4. 执行shutdown且没有开启AOF持久化

二、AOF

将Redis的操作日志以追加的方式写入文件,读操作是不记录的

为什么会出现AOF持久化方式

1、这个持久化文件在哪

启动 redis-server 的目录下会生成 appendonly.aof文件

2、触发机制(根据配置文件的配置项–appendfsync)

no: 表示操作系统进行数据缓存同步到磁盘(快,持久化没保证:写满缓冲区才会同步,若在缓冲区未写满前 shutdown 或其他意外关机,则这部分数据会丢失) always: 同步持久化,每次发生数据变更时(增删改操作),立即记录到磁盘(慢,安全) everysec: 表示每秒同步一次(默认值,很快,但可能会丢失1秒的数据)

3、AOF 重写机制

重写 AOF 文件会 fork 子进程去执行,会将内存中的数据写入新的 AOF 文件,并且是以RDB 的方式写入,重写结束后会替代旧的AOF 文件,后续的客户端命令操作又重新以 AOF的格式写入,redis.conf 中配置触发 AOF 文件重写的文件大小值auto-aof-rewrite-percentage 不宜太小,因为会频繁触发重写

  • 触发时机
  1. redis.conf 的配置项 auto-aof-rewrite-min-size 默认值是 64mb, 当 AOF 文件大小超过这个配置值时会自动开启重写 `。
  2. redis.conf 的配置项 auto-aof-rewrite-percentage 默认值是100, 当 AOF 文件大小的增长率大于配置值时会自动开启重写。

4、优点

保证数据安全

5、缺点

数据恢复慢

Licensed under CC BY-NC-SA 4.0
皖ICP备20014602号
Built with Hugo
Theme Stack designed by Jimmy