Redis(单/多)线程

news2024/11/15 21:33:01

一、 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

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

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

相关文章

AtCoder Beginner Contest 350

前面两道阅读理解直接跳过。 C - Sort 大意 给定一个的排列,你可以执行最多次以下操作,让序列变得有序: 选择两个元素,交换它们的位置。 输出任意可行的操作次数及其对应的操作步骤。 思路 从,考虑把交换到第位…

机器学习中的过拟合问题及应对策略:深入剖析与实战指南

在机器学习的领域中,过拟合是一个普遍而又棘手的问题。过拟合指的是模型在训练数据上表现优秀,但在未知或测试数据上表现不佳的现象。这通常是因为模型过于复杂,以至于“记住”了训练数据的噪声和细节,而非学习其内在规律和结构。…

互连芯片浪潮席卷AI服务器:突破瓶颈,再创辉煌

改变AI服务器:互连芯片技术创新和突破 AI服务器崛起,引领未来创新根据TrendForce数据,AI服务器出货量达130,000台,占服务器总出货量的1%。主要制造商推出生成式AI产品,推动订单激增。ChatGPT等应用的需求持续增长&…

windows ubuntu 子系统:肿瘤全外篇,2. fq 数据质控,比对。

目录 1.质控 2.比对并排序 3.标记PCR重复,使用picard 4.samtools建立索引 首先我们先下载一组全外显子测序数据。nabi sra库,随机找了一个。 来自受试者“16177_CCPM_1300019”(SRR28391647, SRR28398576)的样本“16177_CCPM_1300019_BB5”的基因组DNA配对端文库…

VisionPro 脚本教程专栏:深入理解与实践

文章目录 VisionPro 脚本教程专栏:深入理解与实践。目录1. 脚本简介1.1 VisionPro 项目组成1.2 脚本的作用 2. 脚本类与方法2.1 ToolGroup 脚本类2.2 ToolBlock 脚本类2.3 Job 脚本类 3. 脚本使用案例3.1 Job脚本:自动调节曝光时间3.2 ToolBlock脚本&…

C++:面向对象三大特性之一:继承

继承 1.继承理解2.继承方式引起访问变化表格表格理解 3.赋值转换1.普通对象赋值2.继承对象赋值:赋值转换注意 4.继承的作用域5.派生类默认成员函数1.构造函数2.析构函数3.拷贝构造4.赋值重载 6.继承与友元7.继承与静态成员 1.继承理解 继承机制是面向对象程序设计使…

驶向成功:如何选择适合国际拓展的完美CRM

一、出海企业应该怎么选择CRM? 出海企业在选择CRM系统时,需要考虑行业特性以及在对外业务过程中可能遇到的问题。接触了一些出海企业客户,总结了以下出海企业在选择CRM时的诉求。 1、合法合规风险 出海企业的业务遍布不同国家地区&#xff…

【考研数学】基础跟武忠祥,同步刷《660》的正确方法

听我的,现在立刻马上停下来 你这不是在做题,你这是在看题,效果最差的那种,做完过两天就忘的一干二净了 我不敢说我特别会学习考研数学,但是我考研的时候,最后数学一的成绩是120,不算特别好&am…

搞定这些python自动化测试面试题与答案汇总,offer拿到手软!

1、什么项目适合做自动化测试? 关键字:不变的、重复的、规范的 1)任务测试明确,需求不会频繁变动 2)项目周期要足够长 3)自动化测试脚本可重复使用,比如:比较频繁的回归测试 4&…

01-大语言模型发展

AI大模型的相关的一些基础知识,一些背景和基础知识。 多模型强应用AI 2.0时代应用开发者的机会。 0 大纲 AI产业的拆解和常见名词应用级开发者,在目前这样一个大背景下的一个职业上面的一些机会实战部分的,做这个agent,即所谓智…

基于pytest自动化测试框架分享

一、pytest运行方式与基本规范 1.简单介绍 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试,还可以用来做Web UI自动化测试&#xff0…

第 7 章 导航实现(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 准备工作 请先安装相关的ROS功能包: 安装 gmapping 包(用于构建地图): sudo apt inst…

详细UI色彩搭配方案分享

UI 配色是设计一个成功的用户界面的关键之一。UI 配色需要考虑品牌标志、用户感受、应用程序的使用场景,这样可以帮助你创建一个有吸引力、易于使用的应用程序。本文将分享 UI 配色的相关知识,帮助设计师快速构建 UI 配色方案,以满足企业的需…

webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)

文章目录 ⭐前言⭐canvas绘制图片💖状态保存和恢复💖移动、旋转、缩放、变形💖移动绘制一个渐变的box💖旋转💖缩放 ⭐模拟冒泡排序过程⭐结束 ⭐前言 大家好,我是yma16,本文分享webgl canvas系…

EMD分解

ref:【EMD经验模态分解-哔哩哔哩】 https://b23.tv/LfepZjU 流程: IMF 固有模态函数 imf1 迭代直到是一个imf 8次迭代后,满足是一个imf residual的得到:原始信号-均值(上下包络线的均值) imf2 为什么时序…

【公司UI自动化学习】

公司课程链接:https://l.jd.com/student/project/project.du?project_id697509403 公司的课程,是给一个学习方向。 一、 PC自动化 1)什么项目适合 2)PC自动化介入时间点 3)自动化率: 频繁改动的&…

【Harmony3.1/4.0】笔记二

概述 列表是一种复杂的容器,当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、…

深度学习500问——Chapter08:目标检测(2)

文章目录 8.2.4 R-FCN 8.2.5 FPN 8.2.6 Mask R-CNN 8.2.4 R-FCN R-FCN 有哪些创新点 R-FCN仍然属于two-stage目标检测算法:RPN R-FCN Fully convolutional位置敏感得分图(position-sentive score maps) our region-based detector is ful…

java-Spring-入门学习-第二天(单例模式和多例模式)

目录 Bean作用域 单例模式(默认可以不写) Spring下的 AutoWired 依赖注入 JaveEE下的 Resource 依赖注入 多例模式 Bean作用域 ​在Spring框架中,Bean是按照作用域来创建的,常见的作用域有两种:Singleton 和 Prototype。Singleton (单例…

6.SpringBoot 日志文件

文章目录 1.日志概述2.日志作用3.使用和观察日志3.1如何观察日志3.2使用日志3.3日志级别3.4日志持久化3.5日志分割 4.日志框架4.1门面模式(外观模式)4.2 SLF4J框架介绍4.3 日志格式的说明4.3.1日志名称 5.日志颜色设置6.总结 大家好,我是晓星航。今天为大家带来的是…