Redis配置IO线程

Redis 从 6.0 开始支持 多 IO 线程,但需要注意:

  • 命令执行仍然是单线程
  • 多线程只用于网络 IO(读写 socket)

也就是说,多 IO 线程主要解决 网络读写瓶颈,而不是命令执行并行。


一、Redis IO线程配置位置

redis.conf 中配置:

io-threads 4
io-threads-do-reads yes

两个关键参数:

1 io-threads

表示 IO线程数量

io-threads 4

含义:

1 主线程
3 IO线程

Redis 的规则是:

总线程 = io-threads

但:

  • 主线程负责命令执行
  • 其他线程负责 socket IO

官方建议:

4~8 比较合适

如果 CPU 很多:

io-threads 8

2 io-threads-do-reads

默认是:

io-threads-do-reads no

含义:

  • IO线程 只负责写 socket
  • 读取请求仍然由主线程处理

如果开启:

io-threads-do-reads yes

则:

  • IO线程 同时负责读 + 写

通常推荐开启。


二、完整示例

# IO线程数量
io-threads 4

# 是否让IO线程负责读
io-threads-do-reads yes

修改后重启 Redis。


三、Redis IO线程工作流程

开启后流程变成:

客户端请求
      ↓
IO线程读取socket
      ↓
主线程执行命令
      ↓
IO线程写回响应

流程图可以理解为:

        Client
          │
          ▼
   IO Thread (read)
          │
          ▼
     Main Thread
   (command execute)
          │
          ▼
   IO Thread (write)
          │
          ▼
        Client

四、什么时候需要开启 IO线程

适合场景:

  • 高并发网络请求
  • 小 value 请求很多
  • QPS 很高
  • CPU 有富余

例如:

10万 QPS+

网络 IO 会成为瓶颈。


五、不适合开启的场景

以下情况提升不明显:

  1. value 很大(几 KB / MB)
  2. CPU 已经很高
  3. Redis QPS 不高
  4. 瓶颈在命令执行

因为:

Redis命令执行仍然是单线程

六、生产环境经验

一般配置:

io-threads 4
io-threads-do-reads yes

或者 CPU 很多:

io-threads 8

但要注意:

IO线程数不要超过 CPU 核心数。


七、如何验证 IO线程是否生效

查看 Redis INFO:

INFO stats

或观察:

top -H -p redis_pid

你会看到多个线程:

redis-server
redis-io-thread
redis-io-thread
redis-io-thread

posted @ 2026-04-09 10:11  技术摘抄  阅读(34)  评论(0)    收藏  举报