Redis的持久化策略有两者:AOF和RDB
AOF日志
AOF是以追加的形式进行存储,也就是文件中存储的是一条条命令
AOF中有三种将AOF文件写入磁盘的策略:
- Always:每次加入一条命令就写入磁盘
- Everysec:每秒写入磁盘
- No:Redis不不主动写入磁盘,由操作系统决定何时写入
RDB快照
RDB是在某一时刻,将Redis中的数据写入磁盘
RDB中有两个命令生成RDB文件,分别为save和bgsave,他们的主要区别就是是否在主线程中执行
-
save:直接在主线程中生成RDB文件,由于是在主线程,所以如果生成时间过长,就容易阻塞主线程
-
bgsave:会创建一个子线程生成RDB文件,防止主线程阻塞
补充:bgsave的执行时机由时间/变更次数决定,也就说规定时间内有多少数据发生了变化就执行
优缺点:
AOF:由于存储的是一条条命令,文件会比较大,而且在执行文件时也会造成更大的性能开销,但是他的数据会更加安全,即使Redis宕机,也是丢失最后一次写入前的数据
RDB:由于存储的就是数据本身,所以文件大小更小,数据恢复时更快,但是Redis宕机时,在两次快照直接的数据都会丢失