Redis--线程模型详解

本文解析了Redis的单线程模型如何通过IO多路复用技术提高效率,以及Redis6.0引入多线程的原因,探讨了内存操作对性能的影响和非阻塞IO的应用。
摘要由CSDN通过智能技术生成

Redis线程模型

Redis内部使用的文件事件处理器(基于Reactor模式开发的)file event handler是单线程的,所以Redis线程模型才叫单线程模型,它采用IO多路复用机制同时监听多个socket,当被监听的socket准备好执行accep、read、write、close等操作时,IO多路复用程序会将这些事件的socket压入一个队列中,然后有序地的将这些socket传送给文件事件分派器,文件事件分派器接收到socket之后会根据socket产生的事件类型调用对应的事件处理器进行处理。

什么是IO多路复用机制?

IO多路复用技术是一种处理并发IO操作的技术,核心是让单个线程去监视多个连接,一旦某个连接触发了读、写事件,就去通知应用程序,去处理这个链接,传统的IO模型中,会为每一个连接开启一个线程处理其IO事件,这种模型系统开销大,资源消耗高,IO多路复用通常是通过调用系统的 select poll epoll 来监视IO事件。

IO多路复用技术的优点?

  • 减少了线程的创建和开销,减少了系统的资源消耗。
  • 提高了系统的并发能力,同等资源下可以处理更多的IO事件。
  • 通过事件驱动的方式,避免了轮询方式的消耗。

文件事件处理器的组成部分?

  1. 多个socket。
  2. IO多路复用程序。
  3. 队列。
  4. 文件事件分配器。
  5. 文件事件处理器。
    在这里插入图片描述

文件事件处理器有哪些具体的处理器?

  1. 连接应答处理器:用于处理客户端的连接请求。
  2. 命令请求处理器:用于执行客户端传过来的命令。
  3. 使用(使用次数最少)淘汰算法,LFU是淘汰一段时间内,使用次数最少的key。

Reidis 是单线程的为什么效率还这么高?

  1. Redis是基于内存操作的,数据存储在内存中,纯内存访问,而内存访问的速大概是100纳秒。
  2. 非阻塞的IO模型,Redis使用epol来实现IO多路复用技术,再加上Redis自身的事件处理模型,不在IO上浪费时间。
  3. 单线程避免了线程竞争切换带来的时间消耗。
  4. 高效的数据结构,合理的数据编码。
  5. 合理的线程模型,基于非阻塞的IO多路复用技术。

那为什么Redis 6.0之后又改用多线程呢?
随着网络硬件的发展,Redis开发者发现Redis的性能问题有时候会出现在网络IO处理上,单个线程处理网络请求的速度跟不上底层硬件的速度,于是在Redis 6.0中提出了多线程模型,可以采用多个IO线程来处理网络请求,提高处理网络请求的速度,Redis的多线程模型并不是抛弃了单线程,Redis还是使用单线程处理客户端请求,执行读写命令。
Redis多线程模式是默认关闭的。

如有不正确的地方请各位指出纠正。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值