前提
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 //校验文件是否损坏