Redis是单线程Or多线程?单线程为什么反而快?

news2024/9/25 12:33:50

0. 从什么角度看是单线程or多线程

        从总体角度来,redis是单线程的:

Redis 单线程指的是:
        「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」
这个过程是由一个线程(主线程)来完成的

        但从redis的内部来说,redis程序并非单线程,redis在启动的同时会启动后台线程

        redis会为 “关闭文件、AOF 刷盘、释放内存” 这些任务创建单独的线程来处理。是因为这些任务的操作都是很耗时的,如果把这些任务都放在主线程来处理,那么 Redis 主线程就很容易发生阻塞,这样就无法处理后续的请求了。

这里借用小林coding的图片: 

1. 单线程为什么反而快? 

  1. 无磁盘 I/O:Redis 将数据存储在内存中,所有的读写操作都是在内存中进行的,避免了磁盘的读写延迟。相比于磁盘 I/O,内存操作速度更快。

  2. 非阻塞 I/O:Redis 使用了事件驱动的非阻塞 I/O 模型,在请求处理过程中,不会发生任何阻塞。它通过使用 I/O 多路复用技术(如 epoll、kqueue)实现了高效的事件循环,可以同时处理多个连接而不需要创建额外的线程。
    (关于io多路复用的底层原理可以参考俺的这篇文章:http://t.csdn.cn/nLIwT)

  3. 单线程保证无锁操作:由于 Redis 是单线程的,不会存在多个线程之间的锁竞争,避免了锁带来的开销。这使得 Redis 的操作是无锁的,并且不需要进行复杂的同步和线程上下文切换,从而提升了性能。

3. Redis 6.0 之后引入了“多线程”??

        这里需要注意,怎么redis一会儿多线程一会儿单线程的给人搞晕了。实际上,redis执行命令仍然一直是使用单线程来处理的,不会有多线程同时执行命令。

        这里所说的多线程,是采用:

        多个 I/O 线程来处理网络请求这是因为随着网络硬件的性能提升,Redis 的性能瓶颈有时会出现在网络 I/O 的处理上

        所以为了提高网络 I/O 的并行度,Redis 6.0 对于网络 I/O 采用多线程来处理。据官方表示提升了一倍以上的性能。

4、小结

        总的来说,总体上来看redis处理指令是单线程,内部有多线程来执行后台任务。redis6.0版本后增加的是IO的多线程,而不是处理指令的多线程,即可!

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

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

相关文章

【Leetcode刷题】哈希

本篇文章为 LeetCode 哈希模块的刷题笔记,仅供参考。 哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。哈希表通过哈希函数通过将任意类型的数据映射到固定大小的数据,以实现快速查找和存储数据。C 中的无序容器 unorder…

音视频编码格式-AAC ADT

1408(16进制) : 0001 0100 0000 1000 audioObjectType为 00010 , 即 2, profie (audioObjectType -1 ) AAC LC samplingFrequencyIndex为 1000 , 即 8 , 对应的采样频率为 16000 channelConfiguration为 0001 , 表示channel数量为1

10、哈希函数与哈希表

哈希函数 出现次数最多的 32G 小文件方法:利用哈希函数在种类上均分 设计RandomPool结构 设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入 delete(key):将原本在结构中的某个key移除 getRando…

电商3D资产优化管线的自动化

如果你曾经尝试将从 CAD 程序导出的 3D 模型上传到 WebGL 或 AR 服务,那么可能会遇到最大文件大小、永无休止的进度条和糟糕的帧速率等问题。 为了创作良好的在线交互体验,优化 3D 数据的大小和性能至关重要。 这也有利于你的盈利,因为较小的…

识别评估项目风险常用6大方法

提前识别和评估项目风险,有助于风险预防和规避,从而提前采取预防措施,有效避免和减少风险的发生,防止风险进一步扩大和恶化。如果没有提前识别风险,没有及时处理风险问题,往往造成项目交付延迟、成本超支等…

实时监测与优化:3D车辆状态可视化的崭新前景

当谈到车辆状态可视化时,我们进入了数字化时代的新境界。这不仅是一种技术革命,更是一种全新的智能化管理方式,为车辆运营提供了前所未有的便利和效率。以下是3D车辆状态可视化的一些关键方面,以及它如何改变了我们的交通和物流管…

RT-DETR个人整理向理解

一、前言 在开始介绍RT-DETR这个网络之前,我们首先需要先了解DETR这个系列的网络与我们常提及的anchor-base以及anchor-free存在着何种差异。 首先我们先简单讨论一下anchor-base以及anchor-free两者的差异与共性: 1、两者差异:顾名思义&…

《TCP/IP网络编程》阅读笔记--域名及网络地址

目录 1--域名系统 2--域名与 IP 地址的转换 2-1--利用域名来获取 IP 地址 2-2--利用 IP 地址获取域名 3--代码实例 3-1--gethostbyname() 3-2--gethostbyaddr() 1--域名系统 域名系统(Domain Name System,DNS)是对 IP 地址和域名进行相…

三分钟,教你做出领导满意的可视化报表

数字化已然成为社会发展的共识,企业想要在未来的竞争中占据优势,获取不断发展的数字经济,就必须将数据看作企业的战略资源,利用数据可视化将数据转化为信息,促进企业发展。 数据可视化是什么 在早期数据分析领域&…

业务安全情报第22期 | 不法分子为何盗刷企业短信?

目录 手机短信的重要性 手机短信接口被攻击的危害 社交App短信遭遇疯狂盗刷 社交App该如何防控威胁 规则上的防护措施 技术上的防护措施 近期监测发现,某知名社交平台遭遇黑灰产大规模注册账号,账号短信接口被疯狂盗用。不仅影响正常用户操作&…

TSINGSEE青犀AI视频分析/边缘计算/AI算法·人脸识别功能——多场景高效运用

旭帆科技AI智能分析网关可提供海量算法供应,涵盖目标监测、分析、抓拍、动作分析、AI识别等,可应用于各行各业的视觉场景中。同时针对小众化场景可快速定制AI算法,主动适配大厂近百款芯片,打通云/边/端灵活部署,算法一…

Stable Diffusion — ControlNet 超详细讲解

Stable Diffusion — ControlNet 超详细讲解 ControlNet 最近非常火🔥!ControlNet 和 Stable Diffusion 的结合使 Stable Diffusion 能够接受指导图像生成过程的条件输入,从而增强了 Stable Diffusion 的性能。今天为大家深入剖析 ControlNe…

华为数通方向HCIP-DataCom H12-821题库(单选题:321-340)

第321题 BGP的Open报文是用于建立对等体连接的,以下哪一项不属于Open报文中携带的参数信息? A、发送者的Router ID B、AS号 C、BGP版本号 D、TCP端口号 答案:D 解析:以下是BGP的Open报文: 第322题 在建立BGP对等体的过程中,OpenSent状态表明BGP等待的Open报文 并对收…

合宙Air724UG LuatOS-Air LVGL API控件-微调框 (Spinbox)

微调框 (Spinbox) 微调框用于数值调整,有时候我们希望获取一个用户输入的数值,但是又不希望弹出键盘,可以使用微调框。 示例代码 -- 回调函数 function spinbox_increment_event_cb(obj, event)if event lvgl.EVENT_SHORT_CLICKED thenlvg…

RetroArch 接入两个同款手柄只能识别到一个导致无法双打的问题

测试平台 设备:StationPC M3 RetroArch: 1.1.5(当前官方最新) 手柄:北通蝙蝠BD2F(XBOX360键位) 问题说明 RetroArch插入两个同款手柄/摇杆时只能识别到一个,此时两个手柄都是可以控制模拟器,但是进入游戏也都是p1,无法实现双打 解决办法 …

【Redis】Bitmap 使用及应用场景

前言:bitmap 占用空间小,查询效率高,在一些场景中使用 bitmap 是一个很好的选择。 一、bitmap 相关命令 SETBIT - 设置指定位置的比特值,可以设为 1 或 0 例如 SETBIT key 10 1,将在 key 对应的 bitmap 中第10位设置为…

数据结构——二叉树线索化遍历(前中后序遍历)

二叉树线索化 线索化概念: 为什么要转换为线索化 二叉树线索化是一种将普通二叉树转换为具有特殊线索(指向前驱和后继节点)的二叉树的过程。这种线索化的目的是为了提高对二叉树的遍历效率,特别是在不使用递归或栈的情况下进行遍历…

io和进程day03(文件IO、文件属性函数、目录相关函数)

今日任务 代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> #include <pwd.h> #include <dirent.h> #in…

【管理运筹学】第 7 章 | 图与网络分析(3,最短路问题)

文章目录 引言三、最短路问题3.1 最短路问题定义3.2 Dijkstra 算法3.2.1 算法基本依据3.2.2 算法基本思想与步骤 3.3 逐次逼近算法&#xff08;Bellman-Ford 算法&#xff09;3.4 Floyd 算法 写在最后 引言 承接前文&#xff0c;我们来学习图论中另一个经典问题 —— 最短路问…

解决:使用MySQL Command Line Client时光标不显示的问题

项目场景&#xff1a; 在使用MySQL Command Line Client时&#xff0c;有时候光标会不显示出来&#xff0c;就像下面的图片显示一样。 问题描述&#xff1a; 光标会不显示出来。 解决方案&#xff1a;​​​​​​​ 1.首先将输入法切换到中文输入法&#xff0c;然后随便打出一…