一、RDB
RDB:Redis数据备份文件,也叫Redis数据快照,简单来说就是把内存数据保存的磁盘上,当Redis故障重启后,从磁盘中读取快照并恢复数据到Redis中。
RDB有两种启动命令:
- save:由Redis主进程执行RDB操作,过程中会阻塞其它所有命令。(不推荐)
- bgsave:fork一个子进程异步执行RDB,主进程只在fork过程中阻塞,后续不受影响。
同时,Redis会在停机时自动进行一次RDB操作(主动停机,不是宕机)
也可以在redis.conf文件下配置触发规则
save 900 1
– 表示在900秒内,redis中有1个key发生改变,那么就进行一次bgsave
save 300 10
– 表示在300秒内,redis中有1个key发生改变,那么就进行一次bgsave
save 60 10000
– 表示在60秒内,redis中有10000个key发生改变,那么就进行一次bgsave
其余规则也可以在该文件下配置
总结一下RDB三种触发方式
- 主动停机后自动触发
- 手动执行save/bgsave命令
- 在redis.conf文件下自行配置触发规则
RDB优点和缺点
优点:RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快,非常适合备份、全量复制、灾难恢复等场景。
缺点:每次进行bgsave
操作都要执行fork操作创建子经常,属于重量级操作,频繁执行成本过高,两次RDB快照之前可能丢失数据,所以无法做到实时持久化,或者秒级持久化。
二、AOF
AOF:AOF全称Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件里,可以看成是命令日志文件。
AOF是默认关闭的,需要修改redis.conf文件开启AOF
AOF也可以通过配置,修改记录命令的频率
- always:每写一次,立即记录到AOF文件
- everysec:每写一次,先放入AOF缓冲区,然后每隔一秒从缓冲区写入AOF文件
- no:没写一次,先放入AOF缓冲区,由系统决定何时将缓冲区内容写入磁盘
因为AOF是记录命令的对比RDB的二进制文件,文件体积会大的多。而且AOF会对同一个key的多次写操作记录,但是我们都知道只有最后一次写操作才是有意义的。因此AOF可以用过bgrewriteaof 命令,让AOF文件重写,压缩文件体积。