redis6.0之前是单线程模型,6.0之后是多线程模型

为什么6.0之前采用单线程模型:

  1. redis本身是一个内存数据库,除了持久化,其他操作基于内存,所以处理速度非常快
  2. 大多数场景下,都不是IO密集型的,而是IO密集型的,对于redis来说,瓶颈主要在于网络IO

同时,单线程也带来以下优点:

  1. 避免了多线程调度的上下文切换的开销
  2. 避免了底层的数据同步的锁的开销

6.0之后的多线程:

为什么要引入多线程?

单线程模型的redis已经可以满足10w左右QPS,但是随着互联网的发展,需要满足更大的QPS

而网络IO的read/write系统调用占用了redis执行期间大部分的CPU时间,所以redis使用多线程充分利用多核CPU来减少socket读写阻塞

和单线程的区别:不再是单线程的事件循环,而是多个IO线程各自维护一个事件循环

整体模型上是由Main线程负责接收连接,在分发给IO线程去解析请求命令,具体命令还是Main线程执行,执行完后再使用IO线程回写响应给客户端。

也就是具体命令执行还是单线程,只是socket读写是多线程,一定程度上提高了性能

另外,Redis4.0引入了异步多线程任务来解决比较耗时命令的执行,比如大key删除,持久化

标签: none

仅有一条评论

  1. hi

添加新评论