> 文章列表 > Redis第十四讲 Redis是单线程还是多线程以及Redis保持高性能的原因

Redis第十四讲 Redis是单线程还是多线程以及Redis保持高性能的原因

Redis第十四讲 Redis是单线程还是多线程以及Redis保持高性能的原因

Redis是单线程还是多线程

redis 4.0 之前,redis 是完全单线程的。

redis 4.0 时,redis 引入了多线程,但是额外的线程只是用于后台处理,例如:删除对象,核心流程还是完全单线程的。这也是为什么有些人说 4.0 是单线程的,因为他们指的是核心流程是单线程的。这边的核心流程指的是 redis 正常处理客户端请求的流程,通常包括:接收命令、解析命令、执行命令、返回结果等。

而在最近,redis 6.0 版本又一次引入了多线程概念,与 4.0 不同的是,这次的多线程会涉及到上述的核心流程。redis 6.0 中,多线程主要用于网络 I/O 阶段,也就是接收命令和写回结果阶段,而在执行命令阶段,还是由单线程串行执行。

由于执行时还是串行,因此无需考虑并发安全问题。值得注意的时,redis 中的多线程组不会同时存在“读”和“写”,这个多线程组只会同时“读”或者同时“写”。

需要注意的是在 Redis6.0 中,多线程机制默认是关闭的,需要在 redis.conf 中完成以下两个设置才能启用多线程。

设置 io-thread-do-reads 配置项为 yes,表示启用多线程