01 命令执行与事件循环

命令执行与事件循环

一次 GET 的关键是:连接就绪后解析 RESP,再进入命令分发;慢命令仍可能占住命令执行路径。
版本:Redis Open Source 8.10.3;核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。
specification { element actor { style { shape person; color amber } } element system { style { color muted } } element component { style { color primary } } element storage { style { shape storage; color green } } } model { c = actor '客户端' ae = component '事件循环 / 连接' parse = component 'RESP 解析' dispatch = component '命令分发' db = storage '内存键空间' } views { dynamic view index { title '核心链路' variant sequence c -> ae '发送 GET key' ae -> parse '读取就绪连接的输入' parse -> dispatch '形成参数并进入 processCommand' dispatch -> db '执行 GET 并查找键' db -> dispatch '返回值或不存在' dispatch -> ae '写入客户端输出缓冲' ae -> c '连接可写时发送响应' } }

关键判断

  • 事件循环同时调度文件事件与时间事件;网络就绪不等于一个请求立刻执行完。
  • processInputBuffer / processCommand 负责解析后的处理入口,call 路径调用具体命令实现。
  • 常规命令对键空间的执行按序推进;阻塞类命令可以挂起客户端,不能与长计算占用执行线程混为一谈。

边界

图省略 ACL、事务、过期检查、输出缓冲限制和 I/O 线程细节;后台线程的存在不意味着普通命令可任意并行修改键空间。

官方出处与源码

回到首页 · 下一篇