Appearance
一幅图看懂 Redis 查询执行过程
详细解析
客户端发起请求
- 客户端向 Redis 客户端发送
GET anki_ai.user.id.free_cnt
命令 - 这是一个获取用户剩余免费操作次数的查询操作
- 客户端向 Redis 客户端发送
Redis 客户端处理
- Redis 客户端接收到命令后,会进行命令解析
- 解析出这是一个 GET 命令,以及要查询的键名
anki_ai.user.id.free_cnt
Redis 服务器接收
- Redis 客户端将解析后的命令发送给 Redis 服务器
- Redis 服务器运行在单线程的事件循环模型中
事件循环处理
- 服务器将命令放入事件循环队列
- 事件循环将命令传递给命令处理器
命令处理
- 命令处理器接收到命令后,向内存存储查询键值
- 这里会检查键是否存在
结果处理(两种情况)
- 如果键存在:
- 内存存储返回对应的值
- 值通过命令处理器 → 事件循环 → Redis 服务器 → Redis 客户端 → 最终返回给客户端
- 如果键不存在:
- 内存存储返回 nil
- nil 值同样通过上述路径返回给客户端
- 如果键存在:
重要特性说明
- 所有操作都在内存中完成,时间复杂度为 O(1)
- 持久化操作(RDB/AOF)是异步执行的,不会影响主流程
这个流程图很好地展示了 Redis 的以下特点:
- 单线程事件循环模型
- 内存操作的高效性
- 清晰的命令处理流程
- 异步持久化机制
这种设计使得 Redis 能够高效处理大量的并发请求,同时保持数据的一致性和可靠性。