1.Redis的两种存储策略RDB和AOF
RDB
通过父进程创建了一个子进程,该子进程的作用是将 redis 内存中的数据快照一份下来,写入一个临时的 RDB 文件,然后等持久化完毕后,然后覆盖掉上一次的 RDB 文件。这个过程主进程不进行任何 IO 操作,所以保证了 Redis 的极高性能。
触发机制:
1.满足了 save 的规则, 2.执行了 flushall 命令, 3.退出 redis
优点:
适合大规模的数据恢复
对数据的完整性要求不高
缺点:
需要一定的时间间隔进行操作!如果中途宕机,那么最后一次修改的数据的就没了fork 进度的时候,会占用一定的内存空间。
AOF
与快照持久化相比,AOF 持久化的实时性更好,但是 redis 的默认不是 AOF,所以要去配置文件中开启。
只追加文件,那么追加的是什么呢?什么会更改数据呢?当然是写操作了。所以 AOF 干的事就是把写操作都给他记录下来,重启 redis 之后,再执行这个记录了写操作的文件appendonly.aof
就算这个 aof 有错误,redis 内部有一个 redis-check-aof 可以去修复 aof 文件
持久化方式:
1.每次修改都记录
2.一秒记录一次
3.操作系统自己同步数据
重写机制:
AOF 随着命令的越来越多,他的容量也会越来越大。但是数据库的数据是可以由不同的语句得到。比如 list,我们先分别 rpush A~F,然后在 lpop A~B。那么 AOF 文件直接存 rpush C~F 即可,这就节约空间
了。这就是其中有些命令是可以多行合并成一行的!!
优点:
1.不容易丢失数据,因为复制频率高。
缺点:
1.对于数据文件来说,aof 远远大于 rdb,修复的速度也比 rdb 慢!
2.aof 运行效率也比 rdb 慢,所以 redis 的默认配置是 rdb.