关于 Redis 单线程模型的探讨

关于 Redis 单线程模型的探讨

六月 19, 2025 次阅读

众所周知,Redis 底层使用的是单线程结构,Redis 底层之所以选择这种结构肯定是有原因的,其中最重要的就莫过于多线程可能会出现线程安全的问题
(或者说一定吧,时间久了肯定会出事的,正因为这些原因,使用单线程在某种程度上就帮助我们从根源上直接解决了这个问题,在使用单线程结构的时候,
用户可能会并发发送多个请求过来,但这就好比学校中午放学,学生会成群结队跑向食堂,但最终肯定还是要排队的(毕竟食堂阿姨不能开多线程)

那么,在我们了解到Redis使用单线程处理任务后,我们该如何理解Redis为何用单线程还能高效地完成任务呢?

首先得明确,Redis 的高效率是同其他数据库对比而言的
1、Redis 管理数据采用的是内存,内存的速度应该是无需多言的吧,对于每个数据处理请求都可以非常快速地完成
2、Redis 中的指令不像 MySQL 等关系型数据库,有着复杂的操作命令,如多表连接查询等等时间复杂度可以达到 O(N)以上,Redis中的命令都是简单明了的,不会有
高时间复杂度的查询或操作命令,因此也不会因为某些复杂的操作命令导致资源较长时间占用从而导致线程阻塞
3、Redis 采用的是单线程框架,它利用了内存访问快不太占用CPU资源的特性以及单线程不用担心线程安全问题的优点,大大提高了其访问效率
4、Redis 采用了IO多路转接技术,这种技术可以帮助 Redis 高效处理多客户端请求,通过IO多路转接技术避免了接受用户请求的忙等待,进而提高了效率