Redis为何如此快与其线程模型

news2024/11/18 14:36:52

Redis是单线程的为什么如此快

①redis是基于内存的

首先,Redis 是基于内存的数据库,不论读写操作都是在内存上完成的,完全吊打磁盘数据库的速度。

②Redis是单线程模型,从而避开了多线程中上下文频繁切换的操作

Redis 的单线程指的是 Redis 的网络 IO 以及键值对指令读写是由一个线程来执行的。

③使用多路I/O复用模型,非阻塞I/O

④c语言实现,距离操作系统较近,执行速度更快

redis的线程模型

redis的线程模型也可以解释其为什么如此快,里面有IO多路复用程序可以同时监听多个socket,相对于里面是多线程了,可以支持并发操作,并由文件事件分派器分派事件。

redis内部使用文件事件处理器,这个事件处理器是单线程的,所以redis才叫做单线程的模型。他采用IO多路复用机制同时监听多个socket,将事件的socket压入到内存序列中,然后由文件事件分派器根据socket上面的事件类型来选择对应的事件处理器来处理。

文件事件处理器的结构:

  • 多个socket

  • IO多路复用程序

  • 文件事件分派器

  • 事件处理器(连接应答处理器、命令请求处理器、命令恢复处理器)

多个socket可能会并发产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用会监听多个socket,将产生事件的socket放入队列排队,事件处理器每次从队列中取出有个socket,根据socket的事件类型交给对应的事件处理器进行处理。

下面是客户端与redis的一次通信过程

通信是通过socket来完成的。

  • 首先,redis服务端进行初始化的时候,会将server socket的AE_READABLE事件与连接应答处理器关联

  • 客户端socket01向redis进行的server socket请求建立连接,此时server socket会产生一个AE_READBLE事件,IO多路复用程序监听到server socket产生的事件后,将socket压入队列中,文件事件分派器从队列中获取socket,交给连接应答处理器,连接应答处理器会创建一个能与客户端通信的socket01,并将socket01的AE_READABLE事件与命令请求处理器关联

  • 假设此时客户端发送了一个set key value请求,此时redis的socket01会产生AE_READABLE事件,IO多路复用程序将socket01压入队列,此时事件分派器从队列中获取到socket01产生的AE_READABLE事件。由于前面的socket01的AE_READABLE事件已经与命令请求处理器关联,因此事件分派器将事件交给命令请求处理器处理,命令请求处理器读取socket01的key value并在自己内存中完成key value的设置。操作完成后,他会将socket01的AE WRITABLE事件与命令回复处理器关联。

  • 如果此时客户端准备好接受返回结果,那么redis的socket01会产生一个AE_WRITABLE事件,同样压入队列中,事件分派器找到相关联的命令回复处理器,由命令回复处理器对socket01输入本次操作的一个结果,比如ok,之后就解除socket01与AE_WRITABLE事件与命令回复处理器的关联。

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

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

相关文章

(2024,选择性遗忘,积极遗忘,消极遗忘)机器学习及其他领域的“遗忘”:综述

"Forgetting" in Machine Learning and Beyond: A Survey 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0 摘要 1 引言 2 不同知识领域中的遗忘背景 2.1 心理学中的遗忘&…

responses-validator接口断言之状态码

概述 responses-validator 专用于对 reqeuests 的响应对象进行断言, 同时,为了更适用 yaml 的场景,支持了多种灵活、可扩展的写法,可用于搭建yaml接口自动化测试框架。 根据 reqeuests 响应对象的特点,responses-val…

电流监测利器!FP137宽共模范围高侧轨电流测量IC助您解决电流问题!

随着大量包含高精度放大器和精密匹配电阻的IC的推出,在高侧电流测量中使用差分放大器变得非常方便。高侧检测带动了电流检测IC的发展,降低了由分立器件带来的参数变化、器件数目太多等问题,集成电路方便了我们使用。本文将对FP137高端电流检测…

用Vue3构建一个交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 代码相关的技术博客 应用场景介绍 本代码段用于创建可用于展示服务或产品计划的卡片式组件。此类组件常见于网站或应用程序中,用于以清晰简洁的方式呈现不同级别的功能和定价信息。 代码基本功能…

Pycharm将python程序打包为exe文件

前提:我的文件只有一个,多个的还没有试过 打开项目终端 s1:在项目终端输入(注意要在自己的项目下) pip install pyinstaller s2:在项目终端输入(注意要在自己的项目下) pyinstaller …

香港国际ESG联盟:绿色能源时代的先锋力量

在香港国际ESG联盟引领绿色能源革命浪潮的今天,ESG联盟正以矢志不渝的精神推动大陆储能市场的繁荣与进步,同时立足于香港这一国际金融之都,ESG联盟的视野早已超越地域界限,向中国内地乃至全球市场延伸开来。联盟始终秉承着创新开放…

大模型生成短视频

最近看到一个开源项目可以通过AI生成短视频,然后尝试了下,感觉还不错,下面是具体步骤。 项目名叫moneyprinterTurbo,它本意是对接到Youtube,自动生成视频并上传到Youtube获取流量赚钱,所以项目名叫moneypri…

图形和插图软件Canvas X Pro 20 Build 914

Canvas X Pro是一款功能强大、用途广泛的Windows软件,旨在处理技术图形和可视化,该程序结合了创建矢量和光栅图形的工具,这使其成为需要创建高质量技术插图和演示文稿的工程师、设计师、科学家和其他专业人士的理想选择。 Canvas X Pro的主要功能之一是支持处理大型和复杂的…

ssm职工健康素养数据管理系统设计与实现-计算机毕业设计源码45392

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对职工健康素养数据管理系统等问题&#xff0…

SpringBoot基础配置文件

在SpringBoot当中, 所有的配置文件都将会被配置在application.preperties当中 一: 配置服务器端口 只需要在相应的properties当中输入, 修改我们的端口号即可 server.port80 二: 修改banner #设置 将我们的Banner不再进行显示, 或者是也可以让其在控制台当中显示, 或者是日…

Python 全栈体系【四阶】(五十九)

第五章 深度学习 十三、自然语言处理(NLP) 4. 语言模型 4.1 什么是语言模型 语言模型在文本处理、信息检索、机器翻译、语音识别中承担这重要的任务。从通俗角度来说,语言模型就是通过给定的一个词语序列,预测下一个最可能的词…

外包SEO如何进行?

当你的业务需要外包seo时,首先选择一个信誉良好且经验丰富的SEO服务提供商至关重要,深入研究其过往案例和客户评价可以帮助你评估他们的专业性和可靠性。 在选择了合适的服务商后,你需要与他们进行深入的沟通,讨论你的业务特点、市…

信贷背后的大秘密:贷后管理的作用与智慧

很多朋友可能都听过“贷后管理”这个词,尤其是在征信报告的查询记录里,它经常是出现频率最高的。很多人可能觉得贷后管理就是走过场,没啥大用,其实,这背后可是大有门道的。 贷后管理到底是个啥? 贷后管理&a…

SpringBoot+layui实现商品打标

标题 下拉框组件效果图代码实现前端界面产品打标页面代码 后端代码controllerservice ,serviceImplmappermapper.xmlentity 数据库表 下拉框组件 xm-select 效果图 代码实现 前端界面 <script type"text/html" id"stockTags"><div><div&…

Redis实战篇4:发布博客与点赞

一、博客 关于发布博客这个功能&#xff0c;他就是mysql相关的数据库&#xff0c;不涉及到redis&#xff0c;但是我们可以来看一下其相关的表的功能来了解一下&#xff1a; 博客表&#xff1a; 与其对应的评论表&#xff1a; 关于其数据库的设计也应该好好的学习一下。 二…

盲盒小程序开发:传统与当代的创新融合

谈起盲盒&#xff0c;许多人并不陌生。近几年&#xff0c;盲盒一直是年轻人首选的娱乐消费方式&#xff0c;小小的盲盒为消费者带来了极大的欢乐。 盲盒小程序是将传统的盲盒玩法与线上购物方式相融合&#xff0c;对拆盲盒进行创新&#xff0c;为盲盒消费者带来全新的盲盒体验…

宋街宣传活动-循环利用,绿色生活

善于善行回收团队是一支致力于推动环保事业&#xff0c;积极倡导和实践绿色生活的志愿者队伍。我们的宗旨是通过回收再利用&#xff0c;减少资源浪费&#xff0c;降低环境污染&#xff0c;同时提高公众的环保意识&#xff0c;共同构建美丽和谐的家园。 善于善行志愿团队于2024年…

NLP原理系列1-说清楚transformer原理

NLP原理系列1-说清楚transformer原理 来用思维导图和截图描述。 思维导图的本质是 变化(解决问题)-> 更好的&#xff0c; 或者复杂问题拆分为小问题 以及拆分的思路。 经典全图 0 transformer的前世今生 1 seq2seq 序列化数据 到 序列化数据&#xff0c; 只要能把 训练…

在多项目管理中,企业如何平衡项目资源分配?

数字化时代&#xff0c;多项目管理已经成为了企业内部的常态。组织可以在不同项目之间进行资源合理分配和调度&#xff0c;避免资源浪费和重复使用、提高资源利用率&#xff0c;从而提升项目执行效率和组织整体竞争力。 然而在多项目管理中&#xff0c;资源管理却面临着多重难点…

CrowdSec 防护软件安装与使用

1、环境介绍 操作系统版本&#xff1a;centos 7.9 2、存储库安装 curl -s https://install.crowdsec.net | sudo sh3、安装安全引擎CrowdSec yum install crowdsec启动 systemctl start crowdsec systemctl enable crowdsec4、安装修正组件 yum install crowdsec-firewall…