含义:
利用永久性介质将数据进行保存,在特定时间内将保存的数据进行恢复的工作机制。
方式:
(1)RDB
将当前的数据状态进行保存,快照形式,存储数据结果,格式简单,关注点在数据。
(2)AOF
将数据的操作过程进行保存,日志形式,存储操作过程,格式复杂,关注点在操作过程。
一、RDB
1、save
save指令的执行会阻塞当前Redis服务器,直到当前的rdb过程完成,可能阻塞很长时间。
2、bgsave
发送bgsave指令后,Redis调用fork函数生成子线程,返回消息,后台子线程创建rdb文件。
Redis内部所涉及的rdb操作都是bgsave方式。
3、自动执行
基于条件,Redis服务器在满足条件时发起指令,保存数据
save second changes
4、RDB特殊启动形式
(1)全量复制:主从复制时会启动
(2)服务器重启
(3)服务器关闭时指定保存数据
shutdown save
5、总结
(1)优点
是一个紧凑的二进制文件,存储效率高;
是某个时间点的数据快照,适合数据备份、全量复制等场景;
恢复数据很快;
(2)缺点
无法实时持久化;
bgsave每次都会fork一个子线程,会牺牲一些性能;
不同版本的rdb文件的数据格式不兼容。
二、AOF
以独立日志的方式记录每次写命令,重启时重新执行AOF文件中命令以达到恢复数据的目的。
主要是解决数据持久化的实时性。
1、策略
always——数据零误差,性能较差
everysec(默认)——数据准确性较高,性能较高
no——系统控制,不可控
2、功能开启
appendonly yes|no
配置:appendfsync always|everysec|no
3、重写
为了压缩文件体积,将一个数据的若干条命令执行结果转化为最终结果数据对应的指令进行记录。
(1)作用
降低磁盘占用,提高磁盘利用率;
提高持久化效率,降低持久化写时间,提高IO性能;
降低数据恢复的用时,提高数据恢复效率。
(2)规则
进程内已超时的数据不再写入文件;
忽略无效指令,重写时使用进程内的数据直接生成;
对同一数据的多条写命令合并为一条。
(3)方式
手动重写:
bgrewriteaof
自动重写:
auto-aof-rewrite-min-size size
auto-aof-rewrite-percentage percentage
三、总结
如何选择
- 对于数据非常敏感,建议使用默认的AOF,everysec数据准确性较高,且能保证较高的性能。
- 数据呈现阶段有效性,数据能做到阶段内无丢失,建议使用RDB。
- 灾难恢复选用RDB。
- 双保险策略,同事开启RDB和AOF,重启后,Redis优先AOF恢复数据。