开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
Redis是单线程还是多线程呢
今天我们来聊一聊Redis是单线程还是多线程。Redis官网有详细的解释,感兴趣的小伙伴可以直接查看官网的FAQredis.io/docs/gettin…。在Redis的早期版本里面,一直使用的是单线程,在Redis4.0之后的版本里面,开始引入多线程了,用于处理一些耗时的操作,在Redis6.0之后的网络模型里面,引入了多线程,提高对CPU的利用率,但是此处要注意,Redis执行命令的线程还是单线程。
为什么早期是单线程
在Redis的官方FAQ的解释里面说明了这一问题,官方解释是Redis是对内存的操作,Redis的瓶颈几乎不会是在CPU的性能上,大多数是在内存的大小、网络速度,还有磁盘的IO,所以官方解释是,如果需要将CPU足够的利用起来,可以在一台机器上部署多个Redis实例。
Redis6.0之后采用多线程
Redis4.0开始引入多线程,但是此时多线程只用于处理一些耗时的操作,在Redis6.0之后的版本的网络模型里面引入了多线程,但是对于执行命令主线程这一块,还是采用的是单线程,多线程主要用于处理一些读写数据的操作,例如RDB的持久化、unlink的异步删除、协议解析等等。Redis6.0中的IO是采用的多线程,具体表现为多路网络IO。
Redis执行命令的线程为什么是单线程
Redis执行命令的线程使用单线程可以保证命令执行都是串行化,可以保证命令执行的原子性,并且单线程可以避免线程的上下文切换,提升效率,如果使用多线程,就需要解决线程安全问题,需要引入线程锁等各种锁,复杂程度将会提高,性能也会有有影响,况且Redis的瓶颈是在内存的大小、网络速度,还有磁盘的IO,并不在CPU上面。