原理在学习aof原理前,我们首先要了解 resp (redis的序列化协议)
从图中可以看到客户端在调用redis服务端时,传入的命令和 key、value 都会通过 resp 协议序列化为文本。aof文件中存储的就是序列化后的reids命令。
aof同步和rdb类似之处在于都是采用fork进程来处理:
通过这张图,我们知道了redis是将客户端传入的命令直接写入aof文件的,那如果同一个key原本值是0,然后改为1,最后在改为2,如果每一条命令都记录不仅毫无意义,同时会使得aof文件越来越大,所以 redis 在这块有一个小优化。
aof重写(优化aof文件)set s1 11set s1 22上面的操作,如果没有优化之前aof文件是会将这两个命令按照resp序列化后存储,如果优化后,则只存储后面一条命令即 set s1 22,同一个key的值被覆盖了,只存储最终结果。
重写过程分析
那如果做到同一个key在aof文件中只存储最新的值呢?不可能每一次写入文件前去检查一遍删除之前这个key的值吧,这样做效率肯定贼低,我们来看看redis是怎么做的?
redis 其实是会定期新创建一个 aof 文件,然后做 aof 文件的重写优化,在创建新 aof 文件的过程中,会继续将命令追加到现有的 aof 文件里面,即使重写过程中发生停机,现有的 aof 文件也不会丢失。而一旦新 aof 文件创建完毕, redis 就会从旧 aof 文件切换到新 aof 文件,并开始对新 aof 文件进行追加操作。
这个操作不得不说还是玩的66的!大写的服。
优化的触发条件:
那上面说的定期重建 aof 文件具体的时机是啥时候呢?答案也在配置文件 redis.conf 中,需要如下的配置即可,我已经写了注释,你一眼就能看懂的。
# 表示当前aof文件大小超过上一次aof文件大小的百分之多少的时候会进行重写。如果之前没有重写过,以启动时aof文件大小为准auto-aof-rewrite-percentage 100# 限制允许重写最小aof文件大小,也就是文件大小小于64mb的时候,不需要进行优化auto-aof-rewrite-min-size 64mb
深天马折叠手机面板亮相 明年上半加入战局
滚塑机UL2011认证怎么做?
永磁同步电机的拖拽效应是什么?
每个女生包包的必备好物!aigo移动电源A10S成女神标配
LG Energy Solution首次发行公司债券吸引创纪录的4.7万亿韩元融资
Redis持久化AOF原理学习
苹果“iPhone电池门”在美国遭遇多起诉讼
加速AI技术 日本欲造世界上速度最快的超级计算机
赛思电子北斗时频空间站,邀您登陆!
iPhone13拍照有马赛克 又现新bug
探讨投资半导体产业的挑战与机遇
博世新推出全球最小汽车应用加速度传感器,用于eCall服务等多种应用
HEIF/HEVC恒速图片编码器 FPGA/ASIC IP
红外摄像机如何维护热相关的装配缺陷
蓝牙Mesh模块相比蓝牙4.2模块有什么优势?怎样选择和应用?
chatgpt怎么用
Chipletz采用芯和半导体Metis工具设计智能基板产品 解决Chiplet先进封装设计中的信号和电源完整性分析挑战
Waymo仍在疫情期间继续测试自动驾驶技术 拟在未来提供无人驾驶送货服务
小米mix2售价对比三星note8和iphone8可以说是低价高配了,对上了一点都不虚
光伏并网系统防孤岛保护装置