浅谈redis中aof的原理和实现方式

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值