Redis 多线程核心原理

Redis 6.0+ I/O Multithreading Architecture

📊 核心架构

👥 客户端

Client A
Client B
Client C

🔌 Socket 队列

📥

等待读取

⚡ IO 线程池

IO-1
IO-2
IO-3

并行读写 Socket

🎯 主线程

🔄

• 命令解析

• 命令执行

• 结果组装

📤 响应队列

📤

返回结果

⚙️ 处理流程

1
🤝

接收连接

主线程 accept
客户端连接

2
📖

IO 线程读取

并行读取
Socket 数据

3
📝

命令解析

主线程解析
命令协议

4

命令执行

单线程执行
数据操作

5
📤

IO 线程写回

并行写入
响应数据

❌ 单线程时代 (Redis 6.0前)

  • 🔒 所有操作串行执行
  • ⚠️ 大Value读写阻塞
  • 📉 QPS 受限于 CPU
  • 🐢 高并发下延迟飙升

✅ 多线程 I/O (Redis 6.0+)

  • I/O 操作并行化
  • 🎯 命令执行仍单线程
  • 📈 QPS 提升 2-3 倍
  • 🔄 保持线程安全

⚙️ 配置参数

io-threads 4

IO 线程数量,建议 4-6。设为 1 则禁用多线程,设为 N 则开启 N-1 个 IO 线程。

io-threads-do-reads yes

是否在 IO 线程中执行读操作。开启后读操作也会并行化。

线程数计算公式

实际 IO 线程数 = io-threads - 1(主线程也算一个线程)

🎯 核心要点

🔑

关键:原子性保证

使用 Client 队列 + 互斥锁,确保同一 Client 的命令按序执行,避免数据竞争。

🧵

不是全量多线程

只有网络 I/O 并行化,核心数据操作仍是单线程执行,保持 Redis 简单性。

适用场景

高并发、短命令、高网络带宽利用的场景。不适合大 Key 重度操作。

🔧

性能调优

通过 redis-benchmark 测试,合理配置 io-threads 数量,找到最佳平衡点。

🔄 线程协作示意

🎯 主线程 命令执行区域 命令解析 ⚡ 命令执行 结果组装 🔒 Client 互斥锁 ⚡ IO-1 Socket 读写 ⚡ IO-2 Socket 读写 ⚡ IO-3 Socket 读写 ⚡ IO-4 Socket 读写 读取请求 读取请求 返回响应 返回响应 主线程:命令执行 | IO线程:网络读写