当前位置: 首页 > news >正文

Redis——线程模型·

为什么Redis是单线程却仍能有10w/秒的吞吐量?

  • 内存操作:Redis大部分操作都在内存中完成,并且采用了高效的数据结构,因此Redis的性能瓶颈可能是机器的内存或者带宽而非CPU,既然CPU不是瓶颈,自然就采用单线程解决方案了。
  • 避免多线程竞争:省去了多线程切换带来的性能开销,且不会导致死锁问题。
  • I/O多路复用机制:使用select/epoll机制。在操作系统内核中同时监听所有socket事件的发生。

Redis哪些地方使用了多线程?

Redis单线程指的是:
  1. 接收客户端请求
  2. 解析请求
  3. 进行数据读写等操作
  4. 返回数据给客户端
但Redis程序并不是单线程,Redis在启动时会启动后台线程(BIO模型)
  • 2.6版本后,启动两个后台线程,分别处理关闭文件AOF刷盘
  • 4.0版本后,新增一个后台线程,用来异步释放Redis内存,也就是lazyfree线程。例如执行unlink line/flushdb async等命令,会将这些删除操作交给后台线程来执行,好处是不会导致Redis主线程卡顿。我们应该使用unlink命令来异步删除大Key,因为del在主线程中执行,删除大Key是会导致阻塞
  • 总而言之,多线程体现在后台线程中,如关闭文件、AOF刷盘、释放内存等耗时任务都是通过后台线程来处理的,后台线程相当于消费者,生产者将耗时任务丢到任务队列中即可,消费者则不断轮询该队列处理任务

  • 6.0版本后,Redis采用了多个I/O线程来处理网络请求,因为随着网络硬件的性能提升,Redis的性能瓶颈可能会出现在网络I/O(连接建立、请求读取、写入)上。但多线程仅仅用于网络I/O,执行命令依然使用单线程进行
  • 网络I/O多线程:只针对发送响应数据(write client socket),并不会以多线程的方式处理读请求(read client socket),除非在配置文件中更改。

单线程网络模型的缺陷:

  1. 无法利用多核CPU的性能。
  2. 业务处理时,整个进程时无法处理其他socket事件的,若业务(包括网络I/O)耗时较长就会导致阻塞。

http://www.dtcms.com/a/189018.html

相关文章:

  • STB仿真和放大器开环AC仿真有什么区别
  • 解锁城市排水系统设计与二次开发的钥匙-SWMM复杂城市排水系统模型及排水防涝、海绵城市设计等工程实践应用
  • 二分查找算法的思路
  • 丝杆升降机限位开关信号解析与应用实践:从原理到代码实现
  • 后量子密码通信协议测试指南
  • Lighthouse Core Web Vitals 指标详解与优化指南
  • 深入浅出之STL源码分析8_三个指针
  • 操作系统:内存管理
  • 虚拟机中kali代理设置
  • Glowroot安装使用第一期
  • Java 反射机制(Reflection)
  • AD19基础应用技巧:Via 尺寸设置界面 (Size and Shape)
  • R-Studio:高效电脑数据恢复神器
  • EasyX开发——绘制跟随鼠标移动的小球
  • Stream流简介、常用方法
  • AD PCB布线的常用命令
  • 计算机组成与体系结构:全相联映射(Fully Associative Mapping)
  • ios remote debut proxy 怎么开启手机端调试和inspect
  • coco数据集mAP评估
  • UDP和TCP协议
  • 实现springBoot+vue系统项目时遇到的问题及解决方法
  • 优艾智合机器人助力半导体智造,领跑国产化替代浪潮
  • 3335. 字符串转换后的长度 I
  • Codeforces Round 998 (Div. 3)
  • Generative Diffusion Prior for Unified Image Restoration and Enhancement论文阅读
  • 【图像处理基石】如何入门OCR技术?
  • 2025.05.11拼多多机考真题算法岗-第一题
  • 数学复习笔记 6
  • 目标检测任务 - 数据增强
  • 5月13日day24日打卡