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.rhkb.cn/news/105304.html

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

相关文章

数据分享|R语言PCA主成分、lasso、岭回归降维分析近年来各国土地面积变化影响...

全文链接:http://tecdat.cn/?p31445 机器学习在环境监测领域的应用,着眼于探索全球范围内的环境演化规律,人类与自然生态之间的关系以及环境变化对人类生存的影响(点击文末“阅读原文”获取完整代码数据)。 课题着眼于…

秒杀系统的业务流程以及优化方案(实现异步秒杀)

先看基本的业务流程 那么我们可以看到整个流程都是一个线程来完成的,这样的话耗时还是很长的,那么可不可以采用多线程去实现呢? 首先我们要思考怎么对业务进行拆分,可以想象一个我们去饭店点餐,会有前台接待&#xff…

Docker构建镜像

Docker根据Dockerfile文件构建镜像 在实际生产中,常常使用Dockerfile构建企业级生产环境镜像,然后再部署在我们的生产环境中,本文将从从零开始介绍Dockerfile如何使用,构建镜像。 Dockerhub官网地址:https://registry.hub.docke…

Pyqt5-开源工具分解功能(配置文件+快捷写入)

开源第五篇,配置文件及参数配置,先来看个图: 上述是自动化电池监测的简图。会根据json文件中的数据从而自动写入数据。 如何自动写入数据 从GIF中可以看到,选中的输入的标签都是QLineEdit,而QLineEdit的写入文本方法是.setText(str),注意这里是写入的文本是text,字符串。…

Docker容器:本地私有仓库、harbor私有仓库部署与管理

文章目录 一.本地私有仓库1.本地私有仓库概述2.搭建本地私有仓库3.容器重启策略简介 二.harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3、Harbor的构成4.Harbor私有仓库架构及数据流向5.harbor部署及配置(192.168.198.11)(1&#xf…

有哪些前端调试和测试工具? - 易智编译EaseEditing

前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题,确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具: 调试工具: 浏览器开发者工具: 现代浏览器(如Chrome、Firefox、Safari等&#…

几个nlp的小项目(文本分类)

几个nlp的小项目(文本分类) 导入加载数据类、评测类查看数据集精确展示数据测评方法设置参数tokenizer,token化的解释对数据集进行预处理加载预训练模型进行训练设置训练模型的参数一个根据任务名获取,测评方法的函数创建预训练模型开始训练本项目的工作完成了什么任务?导…

资深网络工程师的网络排障全过程,太强了!【附工具下载】

下午好,我的网工朋友 我们知道,交换机是局域网中一种很重要的网络设备,它的工作状态与客户端系统的上网状态息息相关。 可是,在实际工作过程中,交换机的状态很容易受到外界的干扰,那样一来局域网中就会出…

Java单元测试 JUnit 5 快速上手

一、背景 什么是 JUnit 5?首先就得聊下 Java 单元测试框架 JUnit,它与另一个框架 TestNG 占据了 Java领域里单元测试框架的主要市场,其中 JUnit 有着较长的发展历史和不断演进的丰富功能,备受大多数 Java 开发者的青睐。 而说到…

MES管理系统如何实现数据采集和过程控制

随着工业4.0的到来,MES管理系统解决方案已成为企业实现生产过程数字化和智能化的关键工具。MES生产管理系统不仅提供生产计划、调度、质量管理和设备维护等功能,还在数据采集和过程控制方面发挥着重要作用。本文将探讨MES生产管理系统如何实现数据采集和…

【Hello Network】DNS协议 NAT技术 代理服务器

本篇博客简介:介绍DNS协议 NAT技术和代理服务器 网络各协议补充 DNSDNS背景DNS介绍DNS总结域名简介 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS DNS是一整套从域名映射到IP的系统 DNS背景 为…

Unity怎么制作魔法火焰特效?Unity制作魔法火焰特效方法

Unity制作魔法火焰特效方法: 在第一次玩Supergiant Games的RPG游戏《Hades》时,游戏的美术和视觉效果让人非常吃惊。受此启发,希望能够尝试制作类似风格的作品。 工作流程 整个工作从制作简单的火焰贴图开始。首先,我使用PhotoS…

springboot整合rabbitmq发布确认高级

在生产环境中由于一些不明原因,导致 rabbitmq 重启,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失,需要手动处理和恢复。于是,我们如何才能进行 RabbitMQ 的消息可靠投递。 发布确认 发布确认方案 架构 配置…

npm install 安装依赖,报错 Host key verification failed

设置 git 的身份和邮箱 git config --global user.name "你的名字" > 用户名 git config --global user.email “你的邮箱" > 邮箱进入 > 用户 > [你的用户名] > .ssh文件夹下,删除 known_hosts 文件即可 进入之后有可能会看到 known_hosts…

知识图谱Neo4j安装到实践全过程

前言: Hello大家好,我是Dream。 在本次实战中,我们将一起完成知识图谱Neo4j安装到实践全过程,探索其中的关系和属性。知识图谱是一种以三元组形式存储的数据结构,由实体、关系和属性组成,能够帮助我们更好地…

SpringMVC之@RequestMapping注解

文章目录 前言一、RequestMapping介绍二、详解(末尾附源码,自行测试)1.RequestMapping注解的位置2.RequestMapping注解的value属性3.RequestMapping注解的method属性4.RequestMapping注解的params属性(了解)5.RequestM…

飞书小程序开发

1.tt.showModal后跳转页面 跳转路径要为绝对路径,相对路径跳转无响应。 2.手机息屏后将不再进入onload()生命周期,直接进入onshow()生命周期。 onLoad()在页面初始化的时候触发,一个页面只调用一次。 onShow()在切入前台时就会触发&#x…

网红景区游乐设备普乐蛙5d动感影院体验馆设备组成内容

一个5D7D动感影院体验馆的全套设备组成通常包括以下几个方面: 电影播放设备:包括主控制器、电影播放器、电影储存设备等,用于播放5D电影。 影院座椅:一般采用特殊设计的动感座椅,具备震动、摇晃、抖动等功能&#xff0…

免费的png打包plist工具CppTextu,一款把若干资源图片拼接为一张大图的免费工具

经常做游戏打包贴图的都知道,要把图片打包为一张或多张大图,要使用打包工具TexturePacker。 TexturePacker官方版可以直接导入PSD、SWF、PNG、BMP等常见的图片格式,主要用于网页、游戏和动画的制作,它可以将多个小图片汇聚成一个…

保研面试题复习

信源/信道编码的目的和种类? 这个图是每个人在学习通信原理的时候,都会遇到的图。包含了三要素:信源、信道和信宿。这个图直接可以回答最开始的问题,所谓信源编码就是针对信源编码,所谓信道编码就是针对信道编码。 有…