Redis -- 单线程模型

 失败是成功之母  ——法国作家巴尔扎克


目录

单线程模型

Redis为什么这么快


单线程模型

        redis只使用一个线程,处理所有的命令请求,不是说redis服务器进场内部真的就只有一个线程,其实也有多个线程,那就是处理网络和io的线程。

        Redis使用单线程架构来实现高性能的内存数据库服务。

        下图是两个redis-cli客户端对同一个redis服务器进行+1请求:

        在学习java的过程中我们就可以很容易的就知道,这里肯定涉及到一个多线程问题,表面上是自增两次,但是实际上可能只自增了一次。 出现这种问题的原因就是并发。

        幸运的是redis并不会发生这种问题。因为redis是单线程模型,保证了接受多个请求,都是串行的执行,多个请求也是需要在请求队列中进行排队一个一个的执行。

        redis能够使用单线程模型来进行很好的工作,得益于redis的核心业务逻辑都是短平快。不需要消耗很多的cpu资源就可以执行。

redis单线程图解

        但是他也有弊端,那就是如果一个操作时间过长,那么就会影响其他任务的执行。


        说了这么多,既然是单线程,那为什么redis这么?🧐


Redis为什么这么快

        一切的快慢都是有参照物的,那么redis的快的参照物,毫无疑问那就是mysql和SqlServer等关系型数据库。因为redis是直接访问内存,而这些关系型数据库一般都是访问硬盘操作,访问内存的操作肯定比访问硬盘的操作要更加的快速。

        其次,redis要做的业务的核心功能更加简单。Redis既是访问内存,干的事也是很简单。关系型数据库mysql对于插入查询都有着更加复杂的功能支持,这样的功能势必要话费更多的开销。例如各种插入,都有各种约束,都会消耗性能,让数据库变慢。

        Redis干的活很少,提供的功能也是少了不少。🚀

        由于单线程模型,避免了一些不必要的线程竞争开销。

        处理网络IO的时候,使用了epoll这样的IO多路复用一个线程管理多个socket)再加上Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在网络 I/O 上浪费过多的时间。

Redis如何利用多路复用?

         一个线程, 就可以管理多个 socket针对 TCP 来说,服务器这边每次要服务一个客户端,都需要给这个客户端安排一个 socket一个服务器服务多个客户端, 同时就有很多个 socket.
        这些 socket 上都是无事不刻的在传输数据嘛??? 很多情况下,每个客户端和服务器之间的通信也没那么频繁此时这么多 socket 大部分时间都是 静默的上面是没有数据需要传输的。

        同一时刻只有少数的socket是活跃的,如果每一个客户端都生成一个socket,那么线程就多了,系统开销就大了。

        虽然单线程给 Redis 带来很多好处,但还是有一个致命的问题:对于单个命令的执行时间都是有要求的。如果某个命令执行过长,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客户端的阻塞,对于 Redis 这种高性能的服务来说是非常严重的,所以 Redis 是面向快速执行场景的数据库。

        所以我们应该避免keys * 这样的操作。


        你确实挺厉害,如果能从第一篇看到这里的话。不过这些大多数是我自己复习的文章,如果能帮到你是最好的,谢谢。

        下一篇如下:

Redis -- String 字符串, 计数命令,字符串操作-CSDN博客文章浏览阅读480次,点赞18次,收藏13次。Redis 的String字符串,已经一些常用命令:set ,get , mget , mset , setnx , setex, psetex。计数命令incr,decr,incrby,decrby,incrbyfloat。字符串操作:append, getstrang,setstrange,strlen.https://blog.csdn.net/niceffking/article/details/135952746

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

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

相关文章

MBR分区转换为GPT分区

这里有一个ecs-test用于测试MBR转换为GPT 新增一块数据盘 将数据盘以MBR分区格式分区 将整块磁盘以mbr形式分区 格式化,挂载等 上传文件,方便测试(以便后续转换格式类型,防止文件丢失) 取消挂载 将MBR转换为GPT 需先下载gdisk yum instal…

前端常见的栈溢出报错

什么是栈溢出? 在前端开发中,栈溢出是指JavaScript引擎执行代码时,调用栈(call stack)变得太大,超过了浏览器或JavaScript引擎所分配的栈空间,从而导致栈溢出错误。调用栈是一种数据结构&#x…

Spring-集成Web

一、引子 前面我们在Spring集成Junit中为读者引出了Spring善于集成其它框架的优势,而Spring项目不可能仅限于小范围的某个方法的测试,终究会落脚于Web项目上。于是,我们就从这里正式进入Spring集成Web的话题。由于笔者会从原生的Java Web开发…

@Test Annotation属性- dependsOnMethods属性

目录 语法 如果test1()失败了怎么办?test2()测试会发生什么,因为它依赖于test1? 如果我们在test1()方法上不使用Test注释,但在test 2(&#xf…

【产业实践】使用YOLO V5 训练自有数据集,并且在C# Winform上通过onnx模块进行预测全流程打通

使用YOLO V5 训练自有数据集,并且在C# Winform上通过onnx模块进行预测全流程打通 效果图 背景介绍 当谈到目标检测算法时,YOLO(You Only Look Once)系列算法是一个备受关注的领域。YOLO通过将目标检测任务转化为一个回归问题,实现了快速且准确的目标检测。以下是YOLO的基…

B2119 删除单词后缀

网址如下: B2119 删除单词后缀 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 算是找了个操作字符串的题来做 可以说C的string类确实是好用,但是还是不够熟悉,我不清楚怎么删去string类的后面几个字符 用C的常规做法是在相应地点设\0&…

校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)

变量 R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成。 变量名称以字母或点开头。 变量名是否正确原因var_name2.正确字符开头,并由字母、数字、下划线和点号组成var_name%错误% 是非法字符2var_name错误不能数字开头 .var_name, var.…

蓝桥杯备战——11.NE555测频

1.分析原理图 我们可以看到,上图就是一个NE555构建的方波发生电路,输出方波频率1.44/2(R8Rb3)C,如果有不懂NE555内部结构,工作原理的,可以到B站学习。实在不懂仿真也行,比如我下面就是仿真结果: 然后就是下…

与数组相关经典面试题

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

su导入3d模型为什么不圆滑---模大狮模型网

在将SU(SketchUp)模型导入到其他3D软件中时,可能会遇到模型没有圆滑的情况。这可能是由于以下原因: 模型导出设置不正确:在导出SU模型时,需要确保正确选择导出设置。例如,在导出为.obj格式时,需要选择正确的…

免费的ChatGPT网站 ( 7个 )

ChatGPT的核心功能是基于用户在输入时的语言或文本生成相应的回复或继续内容。此外,它还能够完成多种任务,如撰写邮件、视频脚本、文案、翻译、代码编写以及撰写论文等。 博主归纳总结了7个国内非常好用,而且免费的chatGPT网站,AI…

Unity 访问者模式(实例详解)

文章目录 实例1:简单的形状与统计访客实例2:游戏对象组件访问者实例4:Unity场景对象遍历与清理访客实例5:角色行为树访问者 访问者模式(Visitor Pattern)在Unity中主要用于封装对一个对象结构中各个元素的操…

VS之调用程序对DLL中全局变量的使用

接上篇《VS生成C动态链接库DLL》,能够生成DLL,且能调用后,遇到一个问题,即在DLL程序中定义了一些全局变量,应用程序需要使用,本以为可以直接使用,没想到,还是需要设置才可以&#xf…

秦始皇帝陵K0007陪葬坑文物展览与文物预防性保护的璀璨交汇

秦始皇帝陵博物院近日迎来了一场引人注目的展览——“何止秦俑——秦陵苑囿之K0007陪葬坑”。此次展览首次集中展示了K0007陪葬坑出土的别具一格的陶俑、鲜活灵动的青铜水禽等珍贵文物。然而,这些文物的安全展出离不开高科技的监测平台与实时终端的24小时不间断保护…

搜维尔科技:第九届元宇宙数字人大赛,参赛小组报名确认公告!

各位参赛选手大家好,近期已收到新增报名信息如下表,请各位参赛选手确认,如果信息有误或信息不完整请电话联系赛务组工作人员进行更正 随着元宇宙时代的来临,数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划…

Asp.net移除Server, X-Powered-By, 和X-AspNet-Version头

移除X-AspNet-Version很简单,只需要在Web.config中增加这个配置节: <httpRuntime enableVersionHeader"false" />移除Server在Global.asax文件总增加&#xff1a; //隐藏IIS版本 protected void Application_PreSendRequestHeaders() {HttpContext.Current.Res…

熟悉MATLAB 环境

一、问题描述 熟悉MATLAB 环境。 二、实验目的 了解Matlab 的主要功能&#xff0c;熟悉Matlab 命令窗口及文件管理&#xff0c;Matlab 帮助系统。掌握命令行的输入及编辑&#xff0c;用户目录及搜索路径的配置。了解Matlab 数据的特点&#xff0c;熟悉Matlab 变量的命名规则&a…

巨人踏步,港口自动驾驶提速向前打开行业新空间

按照吞吐量排名&#xff0c;全世界最大的50个港口&#xff0c;中国占了29个。在中国的港口和码头上&#xff0c;一场进化正在发生&#xff1a;人在这个生态中占的比重越来越少&#xff0c;技术接管的要素正在越来越多。像是最具代表性的全球综合自动化程度最高的码头——上海洋…

vue-cli项目运行流程介绍

一、前言 ​ 本文介绍 vue-cli搭建的项目运行流程&#xff0c;基于已经搭建好的基础项目。关于 vue-cli 构建项目的详细流程&#xff0c;可参考博文&#xff1a;使用vue脚手架构建项目 二、main.js 项目运行 会加载入口文件 main.js /* html文件中&#xff0c;通过script …