4.0以前版本
1)每一次向redis写数据,aof持久化文件都会进行一次记录(取决于配置文件的flush数据时间长度),但并不一定会产生dump.rdb
2)rdb持久化方式要比aof频率低一些,也是取决于配置文件中配置的条件,当执行save(阻塞执行)或bgsave命令,
就会调用fork()创建子进程并由子进程完成从内存到磁盘的持久化,产生一个rdb文件。
3)当开启了混合体(既开启了rdb又开启了aof持久化),rdb文件的开头会以REDIS字符串开始。
4)rdb文件是一个压缩后的二进制文件,无法直观查看,可以通过 redis-check-rdb dump.rdb 命令来查看rdb文件的一些统计信息。
5)bgrewriteaof :重写aof持久化文件(合并一些冗余的命令)
4.0以后版本
1)开启aof混合 aof-use-rdb-preamble yes.
2)每一次向redis写数据,aof持久化文件都会记录。
3)bgrewriteaof:aof触发重写,此时会将重写前的redis缓存中的数据转成rdb二进制格式存储到aof文件中,减少了CPU的合并等运算过程(即:aof首次触发重写,aof文件会以REDIS字符串开头并且有一些二进制数据)
4)追加:重写后如果再向redis中写数据时,aof文件后面会追加新数据(结构:redis开头+二进制+新的明文数据)
首次重写会将当前的数据直接以二进制压缩的rdb的形式存储到aof文件中。但是此处并不会产生dump.rdb文件,产生rdb文件的时机依然取决于配置文件中配置的rdb策略。
5)这种方式:全量时点数据+增量日志,恢复数据时速度快。
6)如果要生成rdb文件,可以手动执行bgsave。此时会生成当前所有数据的rdb文件。
如果此时再执行bgrewriteaof就会将原来的aof文件(全量时点二进制+增量日志)替换成当前所有数据的rdb格式(aof文件中存入当前时点所有数据的rdb格式的数据),
之后再在后边追加。
比如:
aof文件替换前:
REDIS #¥RBDFGTRY……¥H$#&*(^
set
k1
a
set
k1
b
aof文件替换后:
REDIS #¥RBDFGTRY……¥H$#&(^……#fM&(该文件包含当前所有数据的二进制)
aof自动重写机制
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
首次启动redis的时候,当redis写到64MB,就会触发重写,然后redis会记录当前文件的大小,比如50MB,下次再写到100MB(即50的100%)会触发重写,比如重写后80MB
redis又会记录当前大小,下一次当文件写到160MB时会自动触发重写,以此类推。
本文详细介绍了Redis的持久化机制,包括4.0之前和之后的区别。在4.0之前,AOF和RDB各有不同的持久化策略;4.0后,AOF启用rdb-preamble,每次写操作都记录,且重写时使用RDB格式。重写过程中,全量数据以RDB格式存储,增量数据以明文追加,提高恢复速度。此外,还讨论了自动触发重写策略及其影响。
1647

被折叠的 条评论
为什么被折叠?



