前提

Redis持久化

redis是基于内存的,如果不想办法将数据保存在硬盘上,一旦redis重启(退出/故障),内存的数据将会全部丢失。

Redis提供了两种持久化方法:

RDB(基于快照),将某一时刻的所有数据保存到一个RDB文件中。
AOF(append-only-file),当Redis服务器执行写命令的时候,将执行的写命令保存到AOF文件中。

RDB

保存某个时间点的全量数据快照

  • 手动触发

    SAVE:阻塞Redis的服务器进程,知道RDB文件被创建完毕
    BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程,使用lastsave指令可以查看最近的备份时间

  • 自动触发

    根据redis.conf配置里的save m n定时触发(用的是BGSAVE)
    主从复制时,主节点自动触发
    执行Debug Relaod
    执行Shutdown且没有开启AOF持久化

RDB的优缺点:

优点:
RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照,适合备份,全量复制等场景。
且加载RDB恢复数据远远快于AOF的方式。

缺点:
没办法做到实时持久化/秒级持久化,因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高。

RDB的相关配置

//在n秒内修改m条数据时创建RDB文件save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yes  //bgsave出错时停止写入rdbcompression yes  //压缩RDB文件rdbchecksum yes   //校验文件是否损坏