aof为append on file。它更类似MySQL中的sql文件,而ROB则类似于将某一时刻内存中redis的全体状态被分别存储到磁盘中。
aof会将内存中所有对数据库进行的增删改 *** 作纪律下来,放入内存中的一个缓冲区,然后再由缓冲区保存到磁盘。等到要用的时候就把语句一条条的取出来,执行它
由于很多 *** 作是重复的,如10 时刻设置a等于hello,20 时刻设置a等于world。那么仅需要保存world,前面的修改均不许需要关心,这就是aof文件的重写,可以减少很多文件冗余。
重写的机制其实就是把数据库的所有数据全部遍历一次,并对其进行判断,并使用append语句,使得它变为set,push等等一系列的字符串语句。无非是对数据类型进行挨个的if判断然后设置不同的新增语句。由于添加的限制,redis一次只能最多添加64条数据。超过的话会有(n/64向上取整 条)新增语句来表示
后台重写:由于重写需要花费较多时间,在这个时间内不能处理其他 *** 作。所以有了后台重写。后台重写内父进程用于梳理其他 *** 作,而子进程负责aof文件的重写。
在对文件进行aof持久化时需要一定的机制,有如下几种
同步即将刚刚发生的 *** 作写入缓冲区
aof的载入 *** 作是这样的:
会创建一个无法 *** 作的伪客户端,他不带有任何网络连接。
这个客户端会负责执行aof文件中的命令,一直到aof文件被循环完毕。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)