谈一谈Redis网络模型

本文探讨了Redis的网络模型,包括单线程和多线程设计,以及为何选择单线程。Redis6.0引入多线程处理IO以利用多核性能。Reactor模型也有所提及,强调了事件驱动在提高效率中的作用。
摘要由CSDN通过智能技术生成

Reids单线程

redis的基础概念在这里就不聊了,主要谈一谈redis的网络模型,一提到redis,可能会听到许多不同的说法,有人会说redis是单线程,有人会说redis是多线程,那么redis到底是不是单线程模型呢?
在这里插入图片描述
其实平常所说的redis单线程是指接收请求 -> 执行命令 -> 回复响应整个流程是由主线程在串行执行,但是还有很多其他操作是需要后台进程、线程去执行的,例如数据持久化等操作,redis本身作为一个高性能缓存,如果没有后台进程、线程的支撑,如何做到高性能呢?
为什么redis使用单线程可以轻松达到10w qps?

  • 基于内存
  • 高效的网络模型
  • 线程模型
  • 高效的数据结构

为什么redis使用单线程模型就可以了?
官方答案:因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了,使用多线程会带来cpu上下文切换的开销以及各种加锁机制,在CPU不是瓶颈的前提下,使用多线程反而会适得其反
单线程带来的好处:

  • 避免了cpu切换
  • 避免了线程之间数据竞争(加锁等等也很耗时)
  • 避免了线程创建带来的开销
  • 代码逻辑简单,清晰明了

Redis多线程

在 2020 年 5 月推出的 Redis 6.0 版本中,Redis 在线程模型中还进一步使用了多线程来处理 IO 任务,这样设计的目的,就是为了充分利用当前服务器的多核特性,使用多核运行多线程,让多线程帮助加速数据读取、命令解析以及数据写回的速度,提升 Redis 整体性能

Reactor模型

Reator有三个组件

  • reator:监听 & 分发事件
  • accept:获取连接
  • handle:处理事件

单Reator单线程模型

redis早期版本采用的就是单reator单线程模型
在这里插入图片描述

单Reator多线程模型

多Reator多线程模型

事件驱动框架

待更新。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值