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 会成为瓶颈。
五、不适合开启的场景
以下情况提升不明显:
- value 很大(几 KB / MB)
- CPU 已经很高
- Redis QPS 不高
- 瓶颈在命令执行
因为:
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
本文来自博客园,作者:技术摘抄,转载请注明原文链接:https://www.cnblogs.com/running-future/p/19839025

浙公网安备 33010602011771号