我的基本理解是Redis中的所有操作都是单线程的。在 Redis-6 中有多线程 I/O .. 我只是好奇如果所有 I/O 线程仍然需要等待执行所有查询的单线程,这有什么优势?我希望有人可以提供一些示例工作负载来说明优点或缺点。
我的基本理解是Redis中的所有操作都是单线程的。
不。即使在 Redis 6 之前,也有一些后台线程,例如后台保存、异步取消链接键。
我只是好奇,如果所有 I/O 线程仍然需要等待执行所有查询的单个线程,这有什么优势?
在 Redis 6 之前,Redis 用 4 步串行(在单个线程中)处理请求:
在完成这 4 个步骤之前,Redis 无法处理其他请求,即使有一些请求准备好读取(步骤 1)。并且通常将响应写入socket(第4步)比较慢,所以如果我们可以在另一个IO线程中进行写操作(配置:io-threads:)中,Redis可以处理更多的请求,并且速度更快。
您也可以将 Redis 设置为在另一个 IO 线程(配置:)中运行第 1 步和第 2 步io-threads-do-reads,但是,Redis 团队声称它通常没有太大帮助(通常线程读取没有太大帮助。--引自redis。配置文件)。
注意:由于第 3 步始终在单个线程中运行,因此 Redis 操作仍然保证是原子的。
有人可以提供一些示例工作负载来说明优点或缺点。
如果您想使用 redis-benchmark 测试 Redis 加速,请确保您也在线程模式下运行基准测试本身,使用 --threads 选项来匹配 Redis 主题的数量,否则您将无法注意到改进. -- 引用自 redis.conf
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |