Redis持久化模式RDB与AOF
RDB持久化
RDB也被叫做Redis数据快照。简单来说就是把内存中的所有数据记录到磁盘中。当Redis实例故障重启后重磁盘中读取快照文件进行数据恢复(快照文件默认保存在当前运行目录);
演示Redis正常停机自动执行一次RDB操作
配置Redis触发RDB机制
RDB其它配置也可在redis.conf中设置
是否对RDB文件进行压缩
建议不开启,压缩RDB会消耗CPU资源相较于磁盘来比CPU资源更宝贵
修改RDB文件名
前面正常关闭Redis会自动去执行一次RDB操作,生成的文件名为dump.rdb,我们可在此对生成rdb文件的名称进行修改
可在此修改生成rdb的文件名
修改文件保存路径
如上生成的rdb文件默认保存在Redis根目录中,可修改此处路径更改rdb/aof文件的保存路径。后续Redis宕机或重启时Redis会读取此路径和上面配置好的rdb/aof文件名去恢复数据;
说明:
xxx.rdb或xxx.aof文件都会存放在此配置的目录中;
RDB总结
RDB的save和bgsave区别?
save和bgsave都是Redis用来生成rdb文件的命令。区别在于save命令是Redis主线程去执行生成/保存RDB文件等一系列操作,因为Redis是单线程的所以在使用save命令生成RDB文件期间Redis是不会处理其它客户的任何请求;bgsave命令是fork的Redis主进程得到一个新的子进程去做RDB的生成/保存操作(bgsave的fork主进程生成子进程的操作会短暂阻塞)但后续最耗时的操作 RDB生成/保存操作都是由子进程去处理的不会阻塞主进程处理其它客户端请求。
特别说明
1.Redis正常退出执行的RDB使用的是save命令;
2.Redis.conf中配置的RDB触发机制使用的是bgsave命令;
RDB方式bgsave基本流程
1.fork主进程得到一个子进程,共享主进程内存空间;
2.子进程读取内存数据并写入新的RDB文件;
3.用新的RDB文件替换旧的RDB文件;
RDB会在什么时候执行?save 60 1000代表什么含义?
RDB什么时候执行及save 60 1000含义
1.正常停止Redis服务时自动执行一次RDB;
2.触发了在redis.conf中配置的RDB触发机制时会执行,如save 600 1000即600秒内至少执行了1000次修改操作时会执行一次RDB;
RDB缺点
1.RDB执行间隔时间长,容易造成数据丢失;
以配置save 600 1000为例:
即600秒内至少发生1000次修改操作时触发RDB。假如程序执行到500秒时执行了
999次写入操作差一次写入操作就执行RDB,若此时Redis服务器宕机。则前面999
次修改操作都会丢失;
2.fork主进程、压缩、写出RDB文件都比较耗时;
AOF持久化
AOF全称为Append Only File(追加文件),Redis处理的每一个写命令都会记录在AOF文件中,AOF可以看做是命令日志文件(AOF默认是关闭的);
修改配置文件开启AOF
编辑reids.conf文件开启AOF 及修改AOF文件名称
修改AOF记录频率
always:
每执行一次写命令,立即记录到AOF文件;
everysec:
写命令执行完先放入AOF缓冲区,然后每隔1秒将缓冲区中的数据写入到AOF文件中去
(推荐使用,最多丢失1秒的数据);
no:
写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区中的数据写到AOF文件;
查看AOF是否生效
1.开启AOF模式
2.启动Reids服务端
3.写入测试数据
4.Ctrl + C关闭Redis服务端
5.观察生成的AOF文件
5.1.生成的AOF文件
5.2.AOF文件记录的Redis命令
5.启动Redis服务端
bgrewriteaof命令
AOF因为记录的是Redis的命令,AOF文件一般要比RDB大得多,而且AOF会记录对同一个Key的多次写操作,对同一个Key的多次写操作只有最后一次才是有意义的。可以通过执行bgrewriteaof命令让AOF文件执行重写功能减小AOF文件体积(类似于执行重写后会去掉AOF文件中那些无意义的命令)
配置AOF文件重写阈值
在redis.conf文件中配置AOF文件重写阈值
配置项
# AOF文件比上次文件 增长超过多少百分比时触发重写;
auto-aof-rewrite-percentage 100
# AOF文件至少多大以上才出发重写;
auto-aof-rewrite-min-size 64mb
说明
如上两个配置项是并且的关系,即AOF至少超过64mb 且 AOF文件比上次文件增长超过
100%时触发重写;
RDB与AOF对比
其它补充
若同时配置了RDB和AOF,Redis优先重AOF中读取并恢复Redis数据,因为AOF的数据完整性更高;
有了AOF配置每秒刷盘(最多丢失1秒的数据)还有必要配置RDB吗?
如果追求数据的极致安全就有必要,此时配置的RDB就充当一个备份的作用,把数据备份到磁盘或者拷贝一份RDB数据放在别的机器或机房去(因为RDB比AOF文件体积要小恢复速度更快更适合做异地备份),起到一个异地容灾的作用;