【redis】单线程redis为什么这么快

    本文以收录专栏 redis核心技术

前言

本专栏为了帮助大家更好的了解学习redis,同时也是自己记录学习redis的内容,包含了大部分的redis核心技术,分布式锁,主从复制等

目录

专题2-单线程redis为什么这么快

2.1redis只有单线程吗?

2.2为什么redis使用单线程

2.3为什么redis单线程这么快?

2.4基于多路复用的高性能I/O模型

专题2-单线程redis为什么这么快

2.1redis只有单线程吗?

为什么说redis是单线程?

redis的网络IO和键值对读写是由一个线程来完成的,这也是redis对外提供键值存储服务的主要流程。

2.2为什么redis使用单线程

多线程面临 多线程编程模式面临共享资源的并发访问控制问题。

多线程有一个关键的瓶颈,系统通常会存在被多线程同时访问的共享资源,比如一个共享的数据结构,当多个线程要修改这个共享资源的时候,为了保证共享资源的正确性,就需要额外的机制进行保证,这个额外的机制,就会带来额外的开销。

所以多线程会降低系统代码易调试性和可维护性。所以为了避免出现这种为问题,redis直接使用单线程模式。

2.3为什么redis单线程这么快?

两个方面原因:

  1. redis大部分操作在内存上完成,并且它有高效的数据结构。
  2. redis采用了多路复用机制,使其在网络IO操作中能处理大量的客户端请求,实现高吞吐率。

但是如果线程被阻塞,就无法进行多路复用了。

为什么线程会被阻塞?这需要了解基本IO模型与阻塞点

这里潜在的阻塞点:accept()和recv()

当 Redis监听到一个客户端有连接请求,但一直未能成功建立起连接时,会阻塞在 accept() 函数这

里,导致其他客户端无法和 Redis 建立连接。

类似的,当 Redis 通过 recv() 从一个客户端读取数据时,如果数据一直没有到达,Redis 也会一直阻塞在 recv()。

这样会导致线程阻塞,无法处理其他客户端请求,导致效率降低。

非阻塞模式

在 socket 模型中,不同操作调用后会返回不同的套接字类型。socket() 方法会返回主动套

接字,然后调用 listen() 方法,将主动套接字转化为监听套接字,此时,可以监听来自客户

端的连接请求。最后,调用 accept() 方法接收到达的客户端连接,并返回已连接套接字。

2.4基于多路复用的高性能I/O模型

Linux中的IO多路复用机制。该机制允许内核中,同时存在多个监听套接字。内核会一直监听这些套接字上的连接请求或数据请求。

redis可以同时和多个客户端连接并处理请求,从而提高并发性。

总结:多路复用的IO模型密切相关,因为避免了accept()和send()/recv()潜在的网络IO操作阻塞点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

剑指offer-替换空格

替换空格一、解题思想二、代码的实现三、总结一、解题思想 题目:请实现一个函数 ,把字符串中的每个空格替换成”%20“。例如:输入”We are happy.“,则输出”We%20are%20happy.“。 看到这个题目,我第一想到的是&#…

博客1:YOLOv5车牌识别实战教程:引言与准备工作

摘要:本篇博客介绍了本教程的目标、适用人群、YOLOv5简介和车牌识别的意义和应用场景。为后续章节打下基础,帮助读者了解YOLOv5和车牌识别的相关背景知识。 正文: 车牌识别视频 引言 欢迎来到YOLOv5车牌识别实战教程!在这个教程中,我们将一步步教你如何使用YOLOv5进行车…

【Git Bash】项目开发过程中需要知道 git stash 的用法

目录1. git stash的应用场景2. 常用git stash命令2.1 git stash2.2 git stash save "message"2.3 git stash list2.4 git stash show2.5 git stash show -p2.6 git stash apply2.7 git stash pop2.8 git stash drop stash{num}2.9 git stash clear3. stash只会保存已…

简单记录一下软著申请流程

模板我就不放了,网上很多,随便下几个结合就行了 总体来说,我是2023.2.19号寄出,2023.4.6看到成功了,总共50天左右。 大家确实不需要网上买那种服务,我也是第一次申请,感觉还是挺简单的。只要按…

洛谷B2038奇偶ASCII值判断

洛谷B2038 题目描述 任意输入一个字符,判断其 ASCII 是否是奇数,若是,输出 YES,否则,输出 NO 。 例如,字符 A 的 ASCII 值是 65,则输出 YES,若输入字符 B(ASCII 值是 66)&#xff0…

从零开始学习Kotlin,带你快速掌握该编程语言

前言 Kotlin是一种跨平台的静态编程语言,它可以在JVM、Android、浏览器、iOS等多个平台上运行。Kotlin的语法简洁易懂,具有高度的可读性和可维护性,同时还具有Java所不具备的许多优点。 Kotlin是一种静态类型、面向对象、函数式编程语言&am…

iOS 项目嵌入Flutter 运行

一 创建Flutter 模块命令行flutter create --template module my_flutter创建完成后,该模块和普通的Flutter项目一直,可以通过Android Studio或VSCode打开、开发、运行;和之前项目不同的iOS和Android项目是一个隐藏文件,并且我们…

多模态 |COGMEN: COntextualized GNN based Multimodal Emotion recognitioN论文详解

论文:COGMEN: COntextualized GNN based Multimodal Emotion recognitioN COGMEN: 基于GNN的多模态情感识别技术 论文实现可参考另外一篇论文: 本文主要分为俩部分,一是对论文的简单概括,二是对论文的翻译。 论文总结 论文翻译…

【学习笔记】SpringAOP的用法全解

文章目录Spring的AOP一、 Spring对AOP的实现包括以下3种方式**什么是AspectJ?**二、使用Spring的AOP1、准备工作2、尝试写一个简单的AOP demo3、代码如下:spring.xml业务类切面类测试类4、复习切面表达式1)所有方法2)指定路径下某个包及其子…

开心档之C++ 运算符

目录 C 运算符 算术运算符 实例 实例 关系运算符 实例 实例 逻辑运算符 实例 实例 位运算符 实例 实例 赋值运算符 实例 实例 杂项运算符 C 中的运算符优先级 实例 实例 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符&…

算法设计-二分

一、有序和单调 ​ 二分本质上是一种更加智能的搜索状态空间的方式,他需要状态空间的状态呈现一种“有序的一维数组”的形式,然后再进行搜索。所以一开始的排序是无法避免的。 ​ 因为二分的写法问题,所以应当怎样排序也是有一定讲究的&…

黑马程序员 linux 学习笔记入门部分合集

ubuntu 安装 本课程使用 ubuntu 系统。 ubuntu 官网 - download。 上面会显示有两个版本,每年 ubuntu 发布两个版本,LTS 是长期维护版,所以相对会较稳定。 介绍 Linux 发行版本 不管什么版本,内核都是一样的。 RPM based&a…

“遥感+”蓝碳储量估算、红树林信息提取与论文写作

详情点击链接:“遥感”蓝碳储量估算、红树林信息提取与论文 一,光谱遥感数据及预处理 .1高光谱遥感数据 高光谱分辨率遥感是用很窄而连续的光谱通道对地物持续遥感成像的技术。在可见光到短波红外波段其光谱分辨率高达纳米数量级。高光谱图像数据…

Linux-Vim

一、Vim 配置 ​ vim界面打开以后很丑就不提了,关键有很多基本功能没有办法实现,所以需要自己配置,如果是linux系统,那么应该找到 /usr/share/vim/.vimrc​ 如果是windows装完git以后会自动一个vim,此时应该找到 Gi…

电子招标采购系统—企业战略布局下的采购寻源

​ 智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明&#xff…

vue + table原生实现表格单元列列宽可重置

const tableMixin {data() {return {dragState: {}, // 记录子表的列宽移动的一些数值dragging: false // 子表是否在重置列宽}},methods: {handleMouseMove(event) {let target event.targetwhile (target && target.tagName ! TH) {target target.parentNode}if (…

算法竞赛ICPC、CCPC、NIO、蓝桥杯、天梯赛

算法竞赛前言一、为什么学习算法竞赛二、学习算法的阶段三、算法竞赛具体学习内容1、基础数据结构1.1、链表1.1.1、动态链表1.1.2、静态链表1.1.3、STL list1.2、队列1.2.1、STL queue1.2.2、手写循环队列1.2.3、双端队列和单调队列1.2.4、优先队列1.3、栈1.3.1、STL stack1.3.…

23 - x的平方根,快速幂,超级次方

文章目录1. x的平方根2. 快速幂3. 超级次方1. x的平方根 二分查找 class Solution { public:int mySqrt(int x) {int left 1, right x;while(left < right){int mid left (right - left) / 2;if(mid > x / mid){right mid - 1;}else if(mid < x / mid){left mi…

OpenShift 4 - Red Hat 是如何对容器镜像的安全风险进行评估分级的

《OpenShift / RHEL / DevSecOps 汇总目录》 文章目录RedHat 对 CVE 的风险级别的评级通用漏洞评分系统 CVSS红帽严重性分级RedHat 对容器镜像的整体风险的分级云原生应用的运行载体是容器镜像&#xff0c;因此容器镜像的安全便是云原生应用安全的关键因素。为此&#xff0c;Re…

联合解决方案|亚信科技AntDB携手蓝凌软件,助推企业数字化办公转型升级

随着企业数字化转型的深入&#xff0c;企业对于协同办公、移动门户、数字运营、智能客服等方面的需求越来越高&#xff0c;数智化正成为催生新动能和新优势的关键力量。数字化的办公平台可以帮助企业实现各类信息、流程的集中化、数字化和智能化管理&#xff0c;为企业管理者提…