Redis持久化(RDB、AOF)

一、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

其余规则也可以在该文件下配置

Redis持久化(RDB、AOF)_第1张图片

 总结一下RDB三种触发方式

  1. 主动停机后自动触发
  2. 手动执行save/bgsave命令
  3. 在redis.conf文件下自行配置触发规则   

RDB优点和缺点 

优点:RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快,非常适合备份、全量复制、灾难恢复等场景。 

缺点:每次进行bgsave操作都要执行fork操作创建子经常,属于重量级操作,频繁执行成本过高,两次RDB快照之前可能丢失数据,所以无法做到实时持久化,或者秒级持久化。 


二、AOF 

AOF:AOF全称Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件里,可以看成是命令日志文件。

AOF是默认关闭的,需要修改redis.conf文件开启AOF

AOF也可以通过配置,修改记录命令的频率

Redis持久化(RDB、AOF)_第2张图片

  • always:每写一次,立即记录到AOF文件
  • everysec:每写一次,先放入AOF缓冲区,然后每隔一秒从缓冲区写入AOF文件
  • no:没写一次,先放入AOF缓冲区,由系统决定何时将缓冲区内容写入磁盘 

因为AOF是记录命令的对比RDB的二进制文件,文件体积会大的多。而且AOF会对同一个key的多次写操作记录,但是我们都知道只有最后一次写操作才是有意义的。因此AOF可以用过bgrewriteaof 命令,让AOF文件重写,压缩文件体积。

 

 

 

 

你可能感兴趣的:(#,Redis,redis,数据库,缓存)