Redis线程模式

news2024/11/26 10:17:47

目录

redis6.0之前:单Reactor单线程

问:为什么Redis要选择单线程???

redis6.0后引入多线程IO


redis6.0之前:单Reactor单线程

大致工作流程:

  • 首先,调用 epoll_create() 创建一个 epoll 对象和调用 socket() 创建一个服务端 socket
  • 然后,调用 bind() 绑定端口和调用 listen() 监听该 socket;
  • 然后,将调用 epoll_ctl() 将 listen socket 加入到 epoll,同时注册「连接事件」处理函数。

初始化完后,主线程就进入到一个事件循环函数,主要会做以下事情:

  • 首先,先调用处理发送队列函数,看是发送队列里是否有任务,如果有发送任务,则通过 write 函数将客户端发送缓存区里的数据发送出去,如果这一轮数据没有发送完,就会注册写事件处理函数,等待 epoll_wait 发现可写后再处理 。
  • 接着,调用 epoll_wait 函数等待事件的到来:
    • 如果是连接事件到来,则会调用连接事件处理函数,该函数会做这些事情:调用 accpet 获取已连接的 socket -> 调用 epoll_ctl 将已连接的 socket 加入到 epoll -> 注册「读事件」处理函数;
    • 如果是读事件到来,则会调用读事件处理函数,该函数会做这些事情:调用 read 获取客户端发送的数据 -> 解析命令 -> 处理命令 -> 将客户端对象添加到发送队列 -> 将执行结果写到发送缓存区等待发送;
    • 如果是写事件到来,则会调用写事件处理函数,该函数会做这些事情:通过 write 函数将客户端发送缓存区里的数据发送出去,如果这一轮数据没有发送完,就会继续注册写事件处理函数,等待 epoll_wait 发现可写后再处理 

问:为什么Redis要选择单线程???

  • Redis 除持久化操作,其余都在内存中完成,并且采用了高效的数据结构,Redis 瓶颈是在网络IO和磁盘IO的传输上;
  • Redis 采用单线程模型可以避免了多线程之间的竞争,省去了多线程切换带来的时间和避免加锁、解锁上性能的开销,而且也不会导致死锁问题。
  • Redis 采用了 I/O 多路复用机制处理大量的客户端 Socket 请求,

redis6.0后引入多线程IO

Redis 6.0 版本支持的 I/O 多线程特性,默认情况下 I/O 多线程只针对发送响应数据(write client socket),并不会以多线程的方式处理读请求(read client socket)。要想开启多线程处理客户端读请求,就需要把 Redis.conf 配置文件中的 io-threads-do-reads 配置项设为 yes。

 关于线程数的设置,官方的建议是如果为 4 核的 CPU,建议线程数设置为 2 或 3,如果为 8 核 CPU 建议线程数设置为 6,线程数一定要小于机器核数,线程数并不是越大越好。

因此, Redis 6.0 版本之后,Redis 在启动的时候,默认情况如下:

  • Redis-server : Redis的主线程,主要负责执行命令;
  • bio_close_file、bio_aof_fsync、bio_lazy_free:三个后台线程,分别异步处理关闭文件任务、AOF刷盘任务、释放内存任务;
  • io_thd_1、io_thd_2、io_thd_3:三个 I/O 线程,io-threads 默认是 4 ,所以会启动 3(主线程算默认线程数中,所以开启4-1)个 I/O 多线程,用来分担 Redis 网络 I/O 的压力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 17: 打印从1到最大的n位数

首先,List类型的要么存Integer,要么存int[],并且后面实现是用ArrayList! 这边的i和j应该从1开始,因为0不能做高位也不能做位数。 这里注意,1是List的实现是用ArrayList,2是从1开始(1…

C++的引用 拷贝赋值和引用赋值

💯 博客内容:C的引用 拷贝赋值和引用赋值 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家&#…

排名前十的开放式蓝牙耳机,哪个蓝牙耳机好一点?

当前耳机最大的受众群体就是年轻人,最怕自己吵到别人,而且更注重自己的舒适度,所以开放式耳机自从出现以来就深受年轻人喜爱,这种耳机用起来很方便,而且振动感不强,不用进入耳道,拥挤耳朵。开放…

C++图形开发(8):空格键控制小球起跳

文章目录 1.绘制小球2.按下空格让小球跳起来 我们今天来实现下按下空格键控制小球的起跳(还没阅读之前文章的同学可以先去阅读一下:C图形开发专栏) 1.绘制小球 首先,我们要绘制小球,这里就不细讲啦,之前的…

4.1 探索LyScript漏洞挖掘插件

在第一章中我们介绍了x64dbg这款强大的调试软件,通过该软件逆向工程师们可以手动完成对特定进程的漏洞挖掘及脱壳等操作,虽然x64dbg支持内置Script脚本执行模块,但脚本引擎通常来说是不够强大的,LyScript 插件的出现填补了这方面的…

2020~2030年 中国智能驾驶市场和技术趋势分析及主流芯片方案概述

分析及主流芯片方案概述智能驾驶已经成为中国用户买车时首选的配置之一,从L0到L2的整个产品布局,已经是车厂卖车时候的重点宣传点,智能驾驶不同于自动驾驶,无论是法律法规和产品定义都有着明确且清晰的定义。用户本身智能驾驶产品…

十个创业九个死,如何看待大学生创业?

虽然大家都在说“十个创业九个死”,尤其是前几年疫情的影响,很多创业和开店铺的都以失败告终,可是对于大学生来说,创业是很值得去做的一件事情。 熟悉我的朋友都知道,我是从事软件开发行业的,虽然前几年的…

实训笔记7.5

实训笔记7.5 7.5一、座右铭二、软件--软件工程2.1 需求分析2.2 系统设计2.2.1 概要设计2.2.2 数据库设计2.2.3 详细设计 2.3 编码开发/实现2.4 系统测试2.5 系统部署运行和维护 三、Java界面编程---仅作了解四、maven--自动化构建工具4.1 作用:4.2 maven如何帮助我们…

C#常见技能_结构

大家好,我是华山自控编程朱老师 前几天一个学员在学习C#与结构交互时,也不知道结构法可以用来做什么 。下面我们就详细讲讲C# 和结构交互的相关知识。 在C#编程中,结构是一种数据类型,它可以用于存储和组织相关数据,并提供对数据…

MySQL原理探索——24 MySQL是怎么保证主备一致的

在前面的文章中,我不止一次地和你提到了 binlog,大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?今天我就正式地和你介绍一…

Selenium 中并行测试的重要性

目录 前言 并行测试 Selenium 中的并行测试 使用 TestNG 和 Selenium 进行并行测试 为什么我们需要在 Selenium 中进行并行测试? 更多测试范围 减少测试时间 成本效益 优化 CI/CD 流程 持续测试 实施并行测试 总结 前言 随着技术的进步,测试…

【JavaEE进阶】Spring核心与设计思想

1,Spring是什么? 我们通常所说的Spring指的是 Spring Framework(Spring 框架),它是一个轻量级的 Java 开源框架,有着活跃庞⼤的社区。Spring 是为了解决企业应用开发的复杂性而创建的,不仅⽀持…

Linux网络抓包工具tcpdump

tcpdump 指令可列出经过指定网络界面的数据包文件头,可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来帮助你摘取有用信息。   由于它需要将网络接口设置为…

青岛大学_王卓老师【数据结构与算法】Week04_11_案例分析与实现1_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

STM32网络通信Web Server中SSI和CGI的应用

介绍 最近由于项目功能需要,开始研究STM32 WebServer通信以及SSI和CGI应用方法。项目结束后,主要总结浏览器与STM32之间进行通行,STM32作为服务器而浏览器做为客户端进行通行。 文件介绍 此部分的代码是根据ST官方的Web Server例程的基础上…

ubuntu配置pppoe的详细过程

虽然我的是22,其实这跟ubuntu的具体版本没什么关系 1 为什么要装pppoe联网? 联想主机装上ubuntu后发现wifi网络在启动后一段时间找不到,突然搜索不了,后来问导师才知道师妹之前就是用这个电脑,然后也碰到过。 所以不…

开发抖音短视频账号矩阵系统技术实现能解决一机一号实名认证问题?

一、短视频账号矩阵系统解决一机一号实名认证问题? 目前站在开发者角度来看问的比较多,做开发技术类矩阵saas工具,需要的多账号怎么解决,这需要从两个方面来做开发解决。 第一、从开发角度来看技术开发首先解决代理ip分发问题&a…

SPSS读取纯文本文件

纯文本文件是通用的一种格式文件,根据纯文本文件中数据的排序方式,可以将其分为自由格式和固定格式。自由格式文本文件的数据项之间必须有分隔符,固定格式数据项之间不需要分隔符。 1.以自由格式读取数据 (1)选择“文…

【嵌入式Qt开发入门】如何使用Qt进行绘制实时图表——QChart 图表

要想使用 Qt Charts,我们的 Qt 版本得使用 Qt 5.7 之后的版本。其实 Qt Charts 并不是 Qt 5.7 才有的,是在 Qt 5.7 以前只有商业版本的 Qt 才有 Qt Charts。我们能免费下载的 Qt 版本都是社区(开源)版本。 Qt Charts 很方便的绘制…

LTD233次升级|官网商城全球卖货•上传文章SEO关键字•创建下载中心

1、支持第三方支付平台Billing System,支持人民币结算外币商品 2、中文商城支持海外收货地址 3、文章批量上传支持传入 SEO关键字 4、拍卖应用支持查看竞价中的报价记录 5、新增下载文件模块 商城应用 1) 支持第三方支付平台 Billing System 在本次升级中&…