Redis深入理解-Socket连接建立流程以及文件事件处理机制

news2024/9/26 5:22:07

Redis Server 运行原理图

在这里插入图片描述

Redis 服务器中 Socket 网络建立以及文件事件模型

一个 redis 单机,可以抗几百上千的并发,这里的并发指的就是同时可以有几百个 client 对这个 redis server 发起请求,都需要去建立网络连接,同时间可能会有几百个 redis client 通过 socket 和我们的 redis server socket 建立网络连接

如果自己使用 java socket 编程,无论使用 nio、bio,一旦要是说一个 server 和一个 client 完成了一个网络连接之后,就会多出来一个 socket,socket 是抽象出来通信的模型,通过一个 socket 就可以跟对方的 socket 形成一个连接

那么对于 redis server 而言,内部为了支撑并发访问的大量的 redis client,redis server 内部就会有几百个 socket,网络连接同时在维持着

因此呢,在 bio 模式下,一个 socket 连接就对应了一个线程来监听请求

在 nio 模式下,可以实现 IO 多路复用,一个线程就可以监听多个 socket 的网络事件

在 redis server 中,就是通过 FileEventHandler 进行多路复用

socket 中会产生一些网络事件,accept(连接应答)、read(有数据可以读的事件)、write(有数据可以写的事件)、close(连接被关闭) 在 redis 中这些网络事件都被抽象为文件事件

基于队列串行化的文件事件处理机制

针对 server 端的大量的 socket,不太可能每一个 socket 都使用一个线程来监听,因为线程资源不够,所以不会采用 bio 模式,因此解决方案就是针对大量的 socket,使用一个线程监听 n 多个 socket,采用 IO 多路复用模式

当 server 端保持了大量的 redis client 的连接,可能在同一时间,大量的 redis client 并发的给 server 端发送大量的请求,redis server 内部大量的 socket 会突然同一时间产生大量的事件(例如 read 事件,write 事件)

对于这些网络事件的处理,有两种解决方案(Redis Server 中就采用了第一种,使用队列进行串行化处理):

  • 使用 queue 队列,将接收到事件的 socket 放入 queue 中进行排队,串行化进行处理
  • 将有事件发生的 socket 分发给不同的线程,来进行并发的处理,开启大量的多线程,多个线程并发的去处理不同的 socket 里面的事件

client 和 server 端建立连接的流程为:

我们会有一个专门的 socket 去监听端口,用于监听来自客户端的连接请求,这个连接请求经过 IO 多路复用,由 连接应答处理器 进行处理,处理的操作其实也就是服务端和客户端进行 TCP 三次握手建立连接,建立好连接之后服务端就会创建一个新的 socket,这个 socket 就是接收客户端对应的事件

那么连接建立之后,客户端对于服务端的一些读写请求就会通过 socket 进行请求,请求到达服务端之后,通过 IO 多路复用将任务分发给不同的事件处理器进行处理,如果是读写请求,就将读写的响应通过 socket 响应给客户端

Redis 串行化单线程模型为什么能高并发?

首先 Redis 是通过 串行化 + 单线程 来应对高并发的

Redis 首先是基于内存操作,速度很快,并且当大量请求进入后,都放入队列中,进行串行化处理,由单个线程直接基于内存进行操作,并且单线程的情况下也不需要加锁以及线程上下文切换(多线程是很占用 CPU 资源的),核心就在于 Redis 通过单线程基于内存进行操作!

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

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

相关文章

Attention is All You Need:Transformer各模块详解

Transformer encoder-decoder架构 Encoder:将输入序列转换为一个连续向量空间中的表示。Encoder通常是一个循环神经网络(RNN)或者卷积神经网络(CNN),通过对输入序列中的每个元素进行编码,得到…

SQLite3 数据库学习(六):Qt 嵌入式 Web 服务器详解

参考引用 SQLite 权威指南(第二版)SQLite3 入门 1. Apache 搭建 cgi 环境 1.1 什么是 Apache Apache 是世界使用排名第一的 Web 服务器软件 它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用 1.2 具体搭建流程…

代码随想录算法训练营Day 59 || 503.下一个更大元素II、42. 接雨水

503.下一个更大元素II 力扣题目链接(opens new window) 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更…

数据中台建设方法论

1、数仓的概念和了解--业务的痛点 产生的痛点:数据资产比较模糊、数据的质量比较低、重复建设、代码的耦合性比较强。 2、数据仓库中的常见的模型: 1、心型模型:中间是一张事实表,周围都是维度表。 对于心型模型的主要的特点&a…

可上手 JVM 调优实战指南

文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器?3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例八、最后总结 全程可上手JVM…

快速了解敏捷测试!解密敏捷测试的难点!

随着敏捷开发模式的普及,越来越多的测试同仁也开始了敏捷测试。那么究竟什么是敏捷测试?敏捷测试与传统测试的主要区别是什么?敏捷测试的难点又是什么?本文会对这三个问题进行讲解。注意:本文只是讲解敏捷测试概念相关…

String 、StringBuffer 和 StringBuilder 的区别?

String 使用 String 声明一个字符串的时候,该字符串会存放在堆中的字符串常量池中。因为在java中所有的String 都是以常量表示,且由 final 修饰,因此在线程池中它的线程是安全的 且 不可变的 。每个 String 在被创建后就不再发生任何变化。 …

新王加冕,GPT-4V 屠榜视觉问答

当前,多模态大型模型(Multi-modal Large Language Model, MLLM)在视觉问答(VQA)领域展现了卓越的能力。然而,真正的挑战在于知识密集型 VQA 任务,这要求不仅要识别视觉元素,还需要结…

【SpringMVC】 对请求的不同响应

前言 本文学习如何运用不同的注解来返回不同的响应. 1.返回静态页面Controller 返回index.html页面 Controller 和 RestController的区别 controller 只有加上这个注解,Spring才会帮我们管理这个代码.后续我们访问时才能访问到. RestController 等同于 Controller ResponseBo…

前端学习--React(3)

一、Redux 集中状态管理工具,不需要react即可使用,每个store的数据都是独立于组件之外的 vue小链接:vuex/pinia 基本使用 Redux将数据修改流程分成三个概念,state、action和reducer state - 一个对象 存放我们管理的数据状态 a…

EI论文故障识别程序:DBN深度置信/信念网络的故障识别Matlab程序,数据由Excel导入,直接运行!

​适用平台:Matlab2021b版及以上 本程序参考中文EI期刊《基于变分模态分解和改进灰狼算法优化深度置信网络的自动转换开关故障识别》中的深度置信网络(Deep Belief Network,DBN)部分进行故障识别,程序注释清晰&#x…

OpenStack云计算平台-Networking 服务

目录 一、网络服务概览 二、网络(neutron)概念 三、安装并配置控制节点 1、先决条件 2、配置网络选项(公共网络) (1)安装组件 (2)配置服务组件 (3)配…

Notepad-- ubuntu下载安装

Notepad-- ubuntu下载安装 下载 Gitee链接: https://gitee.com/cxasm/notepad– 安装 sudo apt install *.deb运行 /opt/apps/com.hmja.notepad/files/Notepad--出错 需要安装qt5 sudo apt-get install qt5-default

【UE】用样条线实现测距功能(下)

目录 效果 步骤 一、实现多次测距功能 二、通过控件蓝图来进行测距 在上一篇(【UE】用样条线实现测距功能(上))文章基础上继续实现多次测距和清除功能。 效果 步骤 一、实现多次测距功能 打开蓝图“BP_Spline”&#xff0c…

UML建模图文详解教程05——包图

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:《UML面向对象分析、建模与设计(第2版)》吕云翔,赵天宇 著 包图概述 包图(package diagram)是用来描述模型中的…

DAOS低时延与高性能RDMA网络

什么是RDMA RDMA(Remote Direct Memory Access)远程直接内存访问是一种技术,它使两台联网的计算机能够在主内存中交换数据,而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样&#xff0c…

抖音本地生活服务商申请怎么做?无保证金的申请方法来了

想做抖音的本地生活服务项目,却不知道去哪里申请,或者如何申请,其实,官方的通道在今年上半年还是有的,自己去平台上提交资料申请就可以了,但需要缴纳高额的保证金。 而在今年下半年,平台已经关…

SPS简单对应分析

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

【算法】经典算法题

文章目录 专题一:双指针1. 移动零2. 复写零3. 快乐数4. 盛最多水的容器5. 有效三角形的个数6. 查找总价格为目标值的两个商品7. 三数之和8. 四数之和 专题二:滑动窗口1. 长度最小的子数组2. 无重复字符的最长字串3. 最大连续1的个数 III4. 将 x 减到 0 的…