Redis(单/多)线程

一、 Redis  单线程  与  多线程  怎么说?

(1)重要的版本迭代

 redis4 之前仅支持 单线程, redis 4之后慢慢 支持多线程,  直到redis6/7后才稳定

(2)redis 的 工作线程 是 单线程的

       (命令) 工作线程 是指  处理Redis的 网络IO  +   键值对读写   的一个线程

        即redis 在处理 客户端请求时   ,所进行的  获取、 解析、 执行、 内容返回等 都是由一个顺序串行的主线程处理  

(3)对于  整个Redis 来说,是多线程的

        redis  的命令工作线程(单线程)+ 持久化RDB + AOF  + 异步删除 + 集群数据同步 (均有额外的线程执行)等等

        对于  整个Redis 来说,是多线程的

(4)redis3单线程时代  性能依旧快的  reason

1、基于内存操作: Redis 的所有数据都存在内存中 ,  因此所有的运算都是内存级别的, 所以他的性能比较高

2、数据结构简单: Redis 数据结构的 查找和操作 时间复杂度大部分为 O(1) , 因此性能比较高

3、多路复用+非阻塞I/O : Redis 使用 I/O 多路复用功能 来监听多个 socket 连接客户端

        可以使用一个线程连接来处理多个请求

        减少线程切换带来的开销

        避免 I/O 阻塞操作

4、避免上下文切换:单线程模型避免了不必要的  上下文切换  和  多线程竞争

        省去了多线程切换  的时间与性能上的  消耗

        而且  单线程不会导致  死锁问题

二、 为何 从单线程 过渡到 多线程

(1)单线程的痛点

redis3最经典的故障,BigKey删除问题

        程序会等待很久  才会释放,类似加了一个 synchronized 锁

        高并发场景下  会程序阻塞卡顿

如何解决?

        使用 惰性删除 可以有效避免  Redis卡顿

        Redis4  使用 unlink key  /  flushdb async / flushall async

三、 redis 6/7 的多线程特性 和 IO多路复用

(0)Redis的主要瓶颈

Redis的主要性能瓶颈:   系统内存大小  +  网络带宽(IO)    +  CPU(一般情况与CPU无关)

(1) IO 多路复用

 0. bg

由于网络硬件的性能提升, 底层网络硬件处理速度 >> 单个主线程网络请求速度

 so    ===> redis 6/7     采用多个IO 线程来处理 网络请求    

                 即  提高网络请求处理的并行度

1.处理流程

主线程 + IO线程  写作完成请求处理

四个阶段

2. 解释

 1.FD (文件描述符/句柄)

2. 解释

IO 多路复用 :

        一种同步的IO模型 ,实现一个线程监视多个文件句柄

        当某个句柄就绪,通知相应的应用程序  进行读写操作

        当没有时, 阻塞应用进程, 释放CPU资源

3. 概念

        I/O: 网络I/O, 数据在 内核态  与  用户态 之间的读写操作(OS层面)

        多路:多个客户端连接(连接指 套接字描述符,即socket or channel)

        复用:复用一个 or more 线程

        IO多路复用: 一个或一组线程 处理多个TCP 连接,使用单进程能够处理多个客户端连接

        total:  一个服务端进程可以  同时  处理多个套接字描述符

                   实现IO 多路复用的模型有3种 : 可分 select -> poll -> epoll 阶段描述

(2)Unix网络编程中的五种 IO 模型

1. Blocking IO - 阻塞IO

2. NoneBlocking IO - 非阻塞IO

3. IO multiplexing - IO多路复用

4. signal driven IO - 信号驱动IO

5. asynchronous IO - 异步IO

 (3) 设置多线程

在redis.conf中设置

四、面试题

1. redis到底是 单线程 还是 多线程?

  redis4 之前仅支持 单线程, redis之后慢慢 支持多线程,  直到redis6/7后才稳定

2.IO多路复用 是什么?

I/O: 网络I/O, 数据在 内核态  与  用户态 之间的读写操作(OS层面)

        多路:多个客户端连接(连接指 套接字描述符,即socket or channel)

        复用:复用一个 or more 线程

        IO多路复用: 一个或一组线程 处理多个TCP 连接,使用单进程能够处理多个客户端连接

        total:  一个服务端进程可以  同时  处理多个套接字描述符

3.redis为什么这么快?

        IO 多路复用 + epoll函数使用   (不仅仅是单线程命令  +  redis 安装到内存中)

4.Subtopic

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus笔记——基础环境搭建

Spring 基础环境 Spring 基础环境 指的是 Spring MyBatis 辅助类 1.引入依赖 <properties> <maven.compiler.source>22</maven.compiler.source> <maven.compiler.target>22</maven.compiler.target> <project.build.sourceEncoding>…

Java-字符-charbyteASCII

1 需求 需求&#xff1a;ASCII表需求&#xff1a;打印 ASCII表需求&#xff1a;ASCII表 分类需求&#xff1a;ASCII表 中 常见字符需求&#xff1a;ASCII表 中 正则相关字符 2 接口 3.X ASCII表 参考资料&#xff1a; https://www.cnblogs.com/amosli/p/3832817.html 3.X 打印…

PotatoPie 4.0 实验教程(24) —— FPGA实现摄像头图像中心差分变换

为什么要对图像进行中心差分变换&#xff1f; 对图像进行中心差分变换的主要目的是计算图像中每个像素点的梯度。梯度在图像处理中是一个非常重要的概念&#xff0c;它可以用来描述图像中灰度变化的快慢和方向&#xff0c;常用于边缘检测、特征提取和图像增强等任务中。 具体…

2024LarkXR新增功能系列之九| 优化分配策略:增加GPU检查参数

Paraverse平行云实时云渲染解决方案LarkXR在2024年新增了优化分配策略&#xff0c;增强了GPU检查参数的能力&#xff0c;满足了复杂元宇宙/数字孪生场景多样性的可视化的需求&#xff0c;为这些应用找到了更好的解决方案。新版本的LarkXR在渲染请求分配策略上做出了显著的改进。…

ShaderLab的混合命令

文章目录 示例原理混合因子混合操作参考 示例 Pass {Tags{"LightMode" "ForwardBase"}// 关闭深度写入ZWrite Off// 设置Pass的混合模式&#xff0c;SrcAlpha: 片元着色器产生的颜色的混合因子// OneMinusSrcAlpha 已经存在于颜色缓冲中的颜色的混合因子…

【ARM 裸机】BSP 工程管理

回顾一下上一节&#xff1a;【ARM 裸机】NXP 官方 SDK 使用&#xff0c;我们发现工程文件夹里面各种文件非常凌乱&#xff1b; 那么为了模块化整理代码&#xff0c;使得同一个属性的文件存放在同一个目录里面&#xff0c;所以学习 BSP 工程管理非常有必要。 1、准备工作 新建…

Unity 物体触碰事件监听

声明委托 public delegate void MyDelegate(Collider trigger); C# 委托&#xff08;Delegate&#xff09; | 菜鸟教程 (runoob.com)https://www.runoob.com/csharp/csharp-delegate.html 定义委托 public MyDelegate onTriggerEnter; public MyDelegateonTriggerStay; pub…

matplotlib绘图二

matplotlib版本&#xff1a;3.7.5 numpy版本&#xff1a;1.24.3 pandas版本&#xff1a;2.0.3 本文主要记录matplotlib对pandas的绘图&#xff0c;matplotlib的绘图技巧参考这里matplotlib基本绘图。 导包 import matplotlib.pyplot as plt import numpy as np import panda…

小程序的合同是怎么样写的

​很多商家找第三方做小程序都遭遇到了各种问题&#xff0c;如访问速度慢、服务器关闭、反复收费等。如果当初商家找的是正规的第三方服务商&#xff0c;双方签订了明确的合同条款&#xff0c;出现任何问题后&#xff0c;相信都能够进行解决。下面将具体介绍合同内容&#xff0…

照片不大于200K怎么压缩?一键压缩图片大小的技巧

现在办理很多事情的时候都会选择网上处理&#xff0c;然后有些需要提交照片或者图片的时候&#xff0c;就会被要求文件大小必须在200k以内&#xff0c;这对于很多人来说处理起来比较困难&#xff0c;所以小编今天专门找到了一款可以将图片压缩指定大小的图片处理工具&#xff0…

Parallels Desktop19虚拟机电脑版下载安装Windows详细图文教程2024最新

Parallels Desktop是一款Mac虚拟机软件&#xff0c;可以在Mac上运行Windows系统&#xff0c;它是Mac上最优秀的虚拟机软件之一。用户无需重启即可在Mac上同时运行Mac OS和Windows应用程序&#xff0c;且两者之间能够无缝切换&#xff0c;对此&#xff0c;用户甚至无需设置双系统…

吴恩达2022机器学习专项课程(一) 7.1 逻辑回归的成本函数第三周课后实验:Lab4逻辑回归的损失函数

问题预览/关键词 上节课回顾逻辑回归模型使用线性回归模型的平方误差成本函数单个训练样本的损失损失函数&#xff0c;成本函数&#xff0c;代价函数的区别线性回归损失函数和逻辑回归损失函数的区别逻辑回归模型的成本函数是什么&#xff1f;逻辑回归模型的损失函数实验逻辑回…

Orange3数据可视化(树查看器-决策树)

树视图 分类和回归树的可视化。 输入 树&#xff1a;决策树 输出 选中的数据&#xff1a;从树节点中选中的实例 数据&#xff1a;带有额外一列&#xff0c;显示每个点是否被选中 这是一个多功能的小部件&#xff0c;用于展示分类和回归树的2D可视化。用户可以选择一个节点…

小毛驴 40km 通勤上班:不一样的工作日!

从到公司上班之后因为距离变远了&#xff0c;也不能像之前一样小毛驴上下班了。 所以通勤方案就变成了&#xff1a; 上班&#xff1a;小毛驴 15min ----- 地铁 40min ----- 公交OR共享单车 12min 步行 5min下班&#xff1a;公交 12min ----- 地铁 40min ----- 小毛驴 15min通…

前端计算机网络之网络模型

什么是网络模型 对于前端开发者而言&#xff0c;理解网络模型的概念是非常重要的。网络模型是描述数据如何在网络中传输和处理的框架和规则&#xff0c;它有助于前端开发者更好地理解和优化应用程序与服务器之间的通信过程。 常用的两类模型 前端开发者需要了解的网络模型主…

2024腾讯游戏安全技术竞赛-机器学习赛道

决赛赛题链接https://gss.tencent.com/competition/2024/doc/2024%E8%85%BE%E8%AE%AF%E6%B8%B8%E6%88%8F%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF%E7%AB%9E%E8%B5%9B-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E5%86%B3%E8%B5%9B.zip 今年的题目是游戏跨语言恶意内容识别 ,题目比较…

Docker 入门篇(一)-- 简介与安装教程(Windows和Linux)

一、Docker简介 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间没有任何接口&#xff08;类似iPhon…

计算机服务器中了devicdata勒索病毒怎么办?Devicdata勒索病毒解密工具步骤

在这个网络飞速发展的时代&#xff0c;网络为企业的生产运营起到了关键性作用&#xff0c;利用网络可以开展各项工作业务&#xff0c;大大提高了企业生产效率与业务水平&#xff0c;在大家都为网络的便利感到欣慰时&#xff0c;网络数据安全问题&#xff0c;成为众多企业关心的…

河南各地市统计面板数据集(2010-2022年)

数据简介&#xff1a;《河南统计NJ》是一部全面反映河南省经济和社会发展情况的资料性年刊。河南统计年鉴包括行政区划资料、国民经济综合资料、基本单位资料和航空港区资料。 而本篇面板数据则反映了河南省各个地级市的经济、人口、就业、农业、工业、人民生活等等方面的发展…

【Linux系统编程】基础指令(三)

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…