Redis持久化分为两种方式,分别为RDB和AOP
RDB
RDB持久化就是把当前进程数据生成快照保存到硬盘的过程
触发机制
手动触发
save 命令:阻塞当前Redis服务,直到RDB过程完成为止
bgsave命令:Redis 进行fork操作创建子进程,RDB持久化操作由子进程负责,完成后自动结束,阻塞只发生在fork阶段。Redis内部所有涉及RDB的操作都采用bgsave的方式,而save方式基本废弃。
自动触发
通过配置redis.conf设置自动快照持久化的方式。
Save 900 1
Save 300 10
Save 60 1000
上面含义是900秒后有一个key键发生修改就执行bgSave。300秒后有10个key发生修改就执行bgSave。60秒后有1000个key发生修改就执行bgSave。
流程
优缺点
优点:
Redis
缺点:
RDB不适合实时持久化
AOF
以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到回复数据的目的
流程
AOF 的流程操作:命令写入,文件同步,文件重写,重启加载
命令写入
AOF采用文本协议格式,并且把命令追加到aof_buf中。
文件同步
AOF 缓冲区同步文件策略,由参数appendfsync控制
appendfsync always
appendfsync everysec
appendfsync no
这里是配置AOF持久化的策略。redis默认使用everysec,就是说每秒持久化一次,而always则是每次操作都会立即写入aof文件中。而no则是不主动进行同步操作,是默认30s一次。当然always一定是效率最低的,个人认为everysec就够用了,数据安全性能又高。