码字不易,转载请注明出处!!
RDB(默认)
- 备份流程:
RDB
的方式是定时从主进程fork
出一个子进程,将子进程的数据写入到硬盘中的临时文件(即所谓的快照),写入完成后替换掉旧的数据文件,默认文件名为:dump.rdb
;并且这个过程中主进程还是在继续接收客户端发送过来的数据; - 触发条件:
RDB
方式的的定时时间是可以设置的:- save 900 1 : 表示15分钟(900秒钟)内至少一个键被更改则进行快照
- save 300 10 : 表示5分钟(300秒)内至少10个键被更改则进行快照
- 备份方式:
RDB
模式下,我们可以通过备份.rdb
文件对数据库进行备份,但是会丢失定时任务执行周期时间内的数据
AOF
- 启动方式:
AOF
模式默认不是开启的,需要修改配置文件配置:appendonly yes
- 备份流程:
AOF
模式是将对数据的操作(读操作除外)写入到一个文件中,下次启动时将文件内容读取出来,全部执行一遍,即可达到恢复数据的目的,默认文件名是:appendonly.aof
; - 触发条件:
redis
每次对数据进行操作都会写入到备份文件,但是可以配置:appendfsync always
:每次执行写入都会进行同步,这是最安全但是效率比较低的方式appendfsync everysec
:每一秒执行appendfsync no
:不主动进行同步操作,由系统去执行,这个是最快但是最不安全的方式
- 重写机制:
- 原因:随着时间迁移,
.aof
文件会越来越大,所以AOF
模式下存在一个重写机制 - 流程:
- 对旧的
.aof
文件拷贝一份,然后整理,只保留恢复当前数据需要的最小指令集,比如对一条数据重复删除、添加,则值需要保留最后的一条添加指令。 - 备份整理的过程中,父进程继续响应客户端请求,并把数据放入缓冲区,一面这部分数据被替换后丢失。
- 旧的
.aof
文件整理好后,会替换掉原有的.aof
文件,并把缓冲区的数据写入替换后的.aof
文件。
- 对旧的
- 触发条件:
auto-aof-rewrite-percentage 100
:表示当前aof文件大小超过上一次文件大小的百分之多少的时候会进行重写,如果之前没有重写过,表示当前aof文件大小为准auto-aof-rewriter-min-size 64mb
:设置需要重写的最小.aof
文件大小,也就是文件小于64mb的时候,不需要进行优化
- 原因:随着时间迁移,
- 备注:因为备份的
.aof
文件是指令的集合,因此是可以读懂的,可以拿来做分析。