@Alpacadh
2022-09-18T16:52:11.000000Z
字数 622
阅读 297
Redis
Redis 支持多线程主要就是两个原因:
Redis 6 的多线程默认是禁用的,只使用主线程。如需开启需要修改 redis.conf 配置文件中的 io-threads-do-reads yes。
开启多线程后,还需要设置线程数,否则是不生效的。同样修改 redis.conf 文件中的 io-threads [n] 配置。
关于线程数的设置,官方有一个建议:4 核的机器建议设置为 2 或 3 个线程,8 核的建议设置为 6 个线程,线程数一定要小于机器核数。还需要注意的是,线程数并不是越大越好,官方认为超过了 8 个基本就没什么意义了。
大致流程如下:
1)主线程负责接收建立连接请求,获取 socket 放入全局等待读处理队列;
2)主线程处理完读事件之后,通过 RR(Round Robin) 将这些连接分配给这些 IO 线程;
3)主线程阻塞等待 IO 线程读取 socket 完毕;
4)主线程通过单线程的方式执行请求命令,请求数据读取并解析完成,但并不执行;
5)主线程阻塞等待 IO 线程将数据回写 socket 完毕;
6)解除绑定,清空等待队列。
该设计的特点:
1)IO 线程要么同时在读 socket,要么同时在写,不会同时读或写。
2)IO 线程只负责读写 socket 解析命令,不负责命令处理。