Redis数据备份
1 Redis数据备份恢复分类
2 RDB备份
2.1 什么是RDB
RDB是redis某一刻在内存中数据的快照。所谓的快照,就是记录在某一时刻的数据状态的文件。
2.2 RDB触发机制
2.2.1 RDB 2种触发机制
-
定时触发redis.conf中配置save/bgsave
表示多少秒触发一次,changes表示save 900 1 save 300 10 save 60 3600
“save 900 1”表示如果900秒内至少1个key发生变化(新增、修改和删除),则重写rdb文件;
“save 300 10”表示如果每300秒内至少10个key发生变化(新增、修改和删除),则重写rdb文件;
“save 60 3600”表示如果每60秒内至少10000个key发生变化(新增、修改和删除),则重写rdb文件 -
命令触发
redis-cli: save / bgsave /flushall /shutdown
2.2.2 save和bgsave区别
save:redis主进程进行数据备份操作,其他数据操作将被阻塞;
bgsave:redis使用fork()函数启动子线程进行数据备份,redis主线程仍然可以处理key值得增加/删除/查询/修改操作;当redis主线程key发生增加/删除/修改操作时,会触发**写时复制**,这时主线程会将变化的数据复制一份给子进程进行备份,保证了备份时间段内发生的修改能被记录到RDB文件中去。
2.3 RDB优点
1、数据恢复速度快
2、数据采用二进制和数据压缩方式写文件,文件体积小
2.4 RDB缺点
1、2次备份文件直接宕机,数据丢失量大
2、备份时占用cpu,服务器性能下降
2.5 应用场景
1、redis主从备份
2、数据完整性要求不高的业务
3 AOF备份
3.1 什么是AOF
AOF是记录从日志创建以来redis内存种所有key值增加/删除/修改命令的文件
3.2 日志写入时机
- 写前复制:在redis命令改变内存数据前就写日志
缺点:需要检查命令语法的合法性 - 写后复制:在redis命令改变内存数据后写日志
缺点:redis命令修改数据后宕机,数据将丢失
AOF是在主线程中进行,磁盘I/O过大,会阻塞下一个指令的执行
3.3 写会时机
- always:同步写回磁盘,数据完全性高,性能低
- everysec:每秒写回磁盘,兼顾数据完整性和性能
- no: 由系统决定写回磁盘时机,数据完整性低
3.4 AOF重写
- 随着时间的增加,写入的命令越来越多,文件过于庞大
- 触发redis.conf文件中配置,启动aof重新
- redis启动bgrewriteaof进程,根据当前的redis内存数据重新写一份aof文件,在写aof的同时,主线程的修改命令写到aof缓存区,最后写入aof文件,保障了在生成aof文件是的修改操作不会丢失。下图为AOF重写流程:
3.5 应用场景
- 数据完整性要求较高的场景
4 混合备份
在RDB备份时间间隔内,启动aof数据备份redis数据改变指令