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 线程细节;后台线程的存在不意味着普通命令可任意并行修改键空间。