Redis之IO模型(单线程和多线程)

redis的io模型。

redis客户端提交的各种请求是如何最终被redis处理的?redis处理客户端请求所曹勇的处理架构,称为Redis的IO模型。不同版本的Redis采用的IO模型是不同的。

单线程模型

对于Redis3.0及其以前的版本,redis的IO模型采用的就是纯粹的单线程模型,即所有客户端的请求全部由一个线程处理。

但是在redis6.0之前的单线程指的是网络IO和键值对读写是由一个线程万臣的。

优点:

  • 1.可维护性高(因为是单线程模型)
  • 2.性能高 不存在并发,读写情况,所以也就不存在执行顺序的不确定性。
  • 3.不存在线程切换的开销(线程切换的开销还是很大的)
  • 4.不存在死锁,不存在加锁/解锁

缺点:

  • 1.单线程性能会受到影响

多线程模型

内存的响应时长(RT)100ns
Redis每秒处理的读写请求数量应该可以达到10的7次方次,也就是1kw次。
实际情况是,Redis每秒可以处理8W-11W的读写请求。

redis6.0引入了多线程指的是网络请求过程采用了多线程,而键值对的读写命令仍然是单线程处理的,所以redis依然是并发安全的。也就是只有网络请求模块和数据操作模块是单线程的,而其他的持久化、集群数据同步等,其实是由额外的线程执行的。

优点:
1.结合了多线程和单线程的优点,避开了他们的不足
缺点:该模型没有明显的不足
如果非要找其不足的话,并非是一个真正意义上的多线程。
因为真正主力任务的线程,仍是单线程,所以其多性能也是有影响的。

多路复用器的选择算法常见的有三种:select模型、poll模型、epoll模型

select模型的选择算法(数组):采用轮询的方式,但是效率有点慢
poll模型的选择算法(链表):采用的是轮询算法,该模型对客户端的就绪处理是有延迟的。
epoll模型的选择算法:采用的是回调方式。根据就绪事件发生后的处理方式的不同,又分为LT模型和ET模型。

posted @ 2022-12-11 21:05  King-DA  阅读(474)  评论(0)    收藏  举报