一、AOF

三种写入策略:

1. Always:

执行redis写命令之后,立即执行写回磁盘,写入磁盘之后,才会返回结果,同步进行,会增加redis的响应延迟,如果此时磁盘io很繁忙,那么写如磁盘就会慢,那么redis 也会增加延迟时间。

2. EverySecond

相比于Always,Redis后台会又一个专门的线程每秒读取AOF日志缓冲区的命令,然后再写入磁盘。

3. No

Redis写入到内存成功后也会同时写入AOF缓冲区,但是此时Redis的后台线程不会执行写入磁盘的操作,而是由操作系统决定。何时存储到磁盘。
image

策略 何时写盘 优 点 缺 点
Aways 同步写入 基本不丢失,增加延迟 io 忙的情况下,会增加线程返回结果的延迟时间,断电的时候会丢失还来的急写入的命令
EverySecond 每秒写入 性能好,不会增加太大延迟 断电会丢失一秒的数据
No 操作系统写入 性能好,不会增加太大延迟 丢失数据多少,由操作系统写磁盘频率决定

二、RDB(Redis DataBase)

AOF和RDB区别
RDB

RDB 文件是经过压缩的二进制文件,占用空间很小,也就是记录redis某一时刻的内存中的全部数据,将这个时刻的数据持久化到磁盘,实际有多少数据就存储多少。恢复速度很快。

AOF

同样的Key如果操作多次日志中会有多条记录,而AOF会将这些记录都写到磁盘中

RDB缺点

因为RDB保存的是某一时刻的内存全部数据,我们在某个时刻生成RDB 文件,假设生成的时间是5s,那么在这之后的这段5s 内的内存数据,是不会参与保存的,造成数据丢失。

本文摘自:https://juejin.cn/post/6977280046553628709 / https://juejin.cn/post/6978759015786348581