redis 7高级篇1 redis的单线程与多线程

一  redis单线程与多线程

1.1 redis单线程&多线程

1.redis的单线程

redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。这也是Redis对外提供键值存储服务的主要流程。

但Redis的其他功能,比如持久化RDB、AOF、异步删除、集群数据同步等等,其实是由额外的线程执行的。

 2.redis的多线程

从redis6.x开始采用io多路复用,让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),将最耗时的Socket的读取、请求解析、写入单独外包出去,剩下的命令执行仍然由主线程串行执行并和内存的数据交互

也就是说就新增了多线程的功能来提高 I/O 的读写性能,使多个 socket 的读写可以并行化。

 结果如下:

 1.2 redis为何执行速度快

1.基于内存;2.简单的数据结构;3.基于io多路复用;4.避免上下文切换

使用一个线程来处理多个客户端请求,减少线程上下文切换带来的开销,同时避免了I/O阻塞操作。

主要原因是:IO多路复用+epoll函数使用,才是redis为什么这么快的直接原因,而不是仅仅单线程命令+redis安装在内存中

1.3 redis单线程存在问题

删除大key时,出现阻塞卡顿问题,针对此问题引入了多线程的异步惰性删除。

命令如下:

Unlink key

Flushdb async

Flushdb async

把删除工作交给二类后台的小弟异步来删除数据。

操作案例:

 1.4 IO多路复用

1.4.1 IO多路复用

一种同步的IO模型,实现一个线程监视多个文件句柄,一旦某个文件句柄就绪就能够通知到对应应用程序进行相应的读写操作,没有文件句柄就绪时,就会阻塞应用程序,从而释放cpu资源。一个专家大夫和多个病人之间的关系。

IO:网络IO,在操作系统层面指的是内核态和用户态之间读写操作

多路:多个客户端连接。

复用:复用一个或者几个线程。

Io多路复用:单个进程能够实现处理多个客户端的连接请求。或者一个服务进程能够可以同时处理多个套接字描述符。

实现io多路复用有3种模型: select-》pll-》epoll这个阶段

 1.4.2 IO多路复用的优点

1.5 redis4.0之前采用单线程原因

1.使用单线程模型是redis开发和维护更加简单。

2.使用是IO多路复用和非阻塞模型。

3.对于redis来说,主要的系统瓶颈是内存或者网络并发cpu。

1.6 redis的多线程开启

默认情况下,redis的多线程功能是没有开启的,需要进行配置

 1.7 redis单线程&多线程总结

1.redis6.x之前网络IO读写和命令执行都是有一个主线程进行操作完成;但是单线程存在删除del key存储卡顿阻塞问题,redis6.x之后使用IO多路复用技术,一个线程处理多个客户端请求,网络IO的读写,解析部分使用多线程,而命令执行部分仍使用一个主线程执行,这样提供了查询效率,同时解决了删除del key卡顿问题。

2.redis基于Io多路复用和epoll函数,减少上下文切换,同时基于内存和数据结构简单 这些是redis查询块的原因

3.io多路复用:单个进程能够实现处理多个客户端的连接请求

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

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

相关文章

Android4:约束布局

创建项目My Constraint Layout 一般创建项目之后activity_main.xml文件默认就是采用约束布局&#xff0c;如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http:…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…

Flink学习笔记(一)

流处理 批处理应用于有界数据流的处理&#xff0c;流处理则应用于无界数据流的处理。 有界数据流&#xff1a;输入数据有明确的开始和结束。 无界数据流&#xff1a;输入数据没有明确的开始和结束&#xff0c;或者说数据是无限的&#xff0c;数据通常会随着时间变化而更新。 在…

麒麟操作系统安装

官网&#xff1a;麒麟 下载&#xff1a;首页->桌面操作系统->银河麒麟桌面操作系统V10->申请试用 提交后->银河麒麟桌面操作系统V10->AMD64版->选择本地下载链接 安装&#xff1a; &#xff08;1&#xff09;创建新的虚拟机->自定义(高级)->稍后安装…

vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件

文章目录 ⭐前言⭐react 组件传值实例&#x1f496;父组件传值给子组件&#xff08;props&#xff09;&#x1f496;子组件传递事件给父组件props绑定事件&#x1f496;父组件触发子组件的事件Ref ⭐vue3 组件传值实例&#x1f496; 父组件传递数据给子组件props&#x1f496; …

CQ课堂 | 社区版 2.3.0 新功能操作演示直播快来预约!

CloudQuery 一体化数据库操作管控云平台&#xff0c;社区版 V 2.3.0 已发布&#xff01; 三大核心功能增强 1、 权限管控&#xff1a;新增自动授权、分级授权 2、 动态脱敏&#xff1a;新增脱敏配置导入导出、脱敏扫描 3、 审计中心&#xff1a;新增上卷下钻能力、审计归档 …

Redis高可用:主从复制详解

目录 1.什么是主从复制&#xff1f; 2.优势 3.主从复制的原理 4.全量复制和增量复制 4.1 全量复制 4.2 增量复制 5.相关问题总结 5.1 当主服务器不进行持久化时复制的安全性 5.2 为什么主从全量复制使用RDB而不使用AOF&#xff1f; 5.3 为什么还有无磁盘复制模式&#xff…

部署问题集合(十九)linux设置Tomcat、Docker,以及使用脚本开机自启(亲测)

前言 因为不想每次启动虚拟机都要手动启动一遍这些东西&#xff0c;所以想要设置成开机自启的状态 设置Tomcat开机自启 创建service文件 vi /etc/systemd/system/tomcat.service添加如下内容&#xff0c;注意修改启动脚本和关闭脚本的地址 [Unit] DescriptionTomcat9068 A…

框架(Git基础详解及Git在idea中集成步骤)

目录 基础&#xff1a; idea集成Git并添加项目到git仓库 1.idea集成git&#xff0c;集成.git.exe文件 2.初始化本地Git仓库项目 3. 将工作区代码添加到暂存区 4.将暂存区代码添加到本地仓库 5.Git本地库操作 Idea集成Gitee并提交代码到第三方库 1.setting里搜索gitee 2.添…

老板都爱看的财务数据分析报表,全在这了

老板们都爱看哪些财务数据分析报表&#xff1f;自然是可以帮助他们更好地了解公司的财务状况和经营绩效的那一类财务数据分析报表&#xff0c;比如利润表、资产负债表、现金流量表、应收账款分析报表、应付账款分析报表、库存分析报表等。奥威BI数据可视化工具有一套标准化财务…

windows系统丢失mfc120u.dll的解决方法

1.mfc120u.dll是什么 mfc120u.dll是Windows操作系统中的一个动态链接库&#xff08;Dynamic Link Library&#xff0c;简称DLL&#xff09;文件。它包含了一些用于运行C程序的函数和其他资源。这个特定的DLL文件是Microsoft Foundation Classes&#xff08;MFC&#xff09;库的…

CentOS下MySQL的彻底卸载的几种方法

这里我为大家详细讲解下“CentOS下MySQL的彻底卸载的几种方法”的完整攻略。 一、关闭MySQL服务 在开始操作之前&#xff0c;需要先关闭MySQL服务。可以使用以下命令来关闭MySQL服务&#xff1a; systemctl stop mysqld 或者 service mysqld stop 二、使用yum命令卸载MySQL…