news 2026/5/17 4:23:58

对于AOF模块和命令层交互的理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对于AOF模块和命令层交互的理解

AOF 在 TinyRedis 里是旁路持久化模块,插在写命令执行链路旁边。普通客户端写命令执行成功后,CommandDispatcher 会通过 appendIfNeeded 判断是否需要写 AOF;如果是写命令、AOF 开启、并且不是 AOF replay 或复制回放,就调用 AOF::appendCommand,把 argv 编码成 RESP Array 追加到 appendonly.aof。

服务启动时,EpollServer::init 会先调用 CommandDispatcher::loadAof。loadAof 本身不直接读文件,而是调用 AOF::replay。AOF::replay 负责读取 AOF 文件,用 RESPParser 解析命令,再用 CommandParser 转成 argv;每解析出一条 argv,就通过 lambda 回调给 CommandDispatcher,执行 dispatchInternal(argv, true),把命令回放到 InMemoryDB。这里传 true 是为了避免 replay 过程中再次追加 AOF,也避免 replica 的 READONLY 逻辑影响内部回放。

AOF 的刷盘策略有 always、everysec、no 三种。always 是每次追加后立即 fsync;everysec 是追加后只标记 dirty_,由 cron 周期调用 flushIfNeeded,在距离上次 fsync 超过约 1 秒时刷盘;no 则不主动 fsync,交给操作系统。everysec 是性能和安全性的折中,宕机最多可能丢最近约 1 秒数据。

AOF rewrite 用于压缩 AOF 文件,不是定时每秒执行。REWRITEAOF 是同步 rewrite,会通过 snapshotCommands 从当前内存状态生成 SET/HSET/EXPIRE 等最小恢复命令,写入临时文件,fsync 后 rename 原子替换旧 AOF。BGREWRITEAOF 是后台 rewrite,startBackgroundRewrite 用后台线程写快照临时文件,主线程继续处理请求;rewrite 期间的新写命令正常追加旧 AOF,同时额外进入 backgroundRewriteBuffer_。后台完成后,pollBackgroundRewrite 在主线程收尾,把 buffer 追加到新临时文件末尾,再 rename 替换旧 AOF,保证 rewrite 期间的新写入不丢。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/17 4:23:55

零知识证明身份认证实战:从Circom电路到智能合约全链路开发

1. 项目概述:从零理解零知识证明与身份认证最近在GitHub上看到一个名为“zap1-learning-attestation”的项目,这个标题立刻引起了我的兴趣。作为一个在安全与密码学领域摸爬滚打多年的从业者,我深知“零知识证明”和“身份认证”这两个词组合…

作者头像 李华
网站建设 2026/5/17 4:18:39

哪个降AI工具好用又便宜?这个软件能同时降AI率和重复率到合格

哪个降AI工具好用又便宜?这个软件能同时降AI率和重复率到合格 "好用又便宜"在降 AI 工具市场上是个真问题 毕业季论文群里同学问得最多的话题是"哪个降 AI 工具好用又便宜"——这背后的潜台词是: 我预算紧、不想花太多钱我担心便…

作者头像 李华
网站建设 2026/5/17 4:13:54

乌尔都语AI语音项目上线倒计时72小时!ElevenLabs生产环境配置检查清单(含SSL证书兼容性、RTL文本渲染、以及Punjabi混读容错开关)

更多请点击: https://intelliparadigm.com 第一章:乌尔都语AI语音项目上线倒计时全局概览 乌尔都语AI语音项目已进入最后72小时冲刺阶段,核心语音识别(ASR)与文本转语音(TTS)双模型已完成全链路…

作者头像 李华
网站建设 2026/5/17 4:13:48

Godot 4 3D角色控制器开发指南:从开源项目到实战应用

1. 项目概述:从开源仓库到你的第一个3D角色如果你在GitHub上搜索过Godot 4的3D角色资源,大概率会碰到一个叫“gdquest-demos/godot-4-3D-Characters”的仓库。这可不是一个简单的模型包,它是Godot官方教育团队GDQuest精心制作的一套开源、可学…

作者头像 李华