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

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

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

相关文章

Python构建学生信息管理系统:构建RESTful API - 学生信息管理系统的后端逻辑

在之前的博客里,我们已经完成了项目初始化,在本篇博客中,我们将深入探讨如何使用Flask框架实现学生信息管理系统的后端逻辑,特别是通过RESTful API来实现学生信息的增删改查(CRUD)操作。 Flask RESTful AP…

C系统编程:从零手搓一个shell

背景 这么久没更新就是在干这件事!!因为系统编程已经学的差不多了,所以想找几个项目练练手,之前就一直想写一个自己的shell!!现在终于有机会实现了。 首先说明一下我的操作系统:Arch linux 服务…

函数的查询

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在实际使用中经常会需要查询数据库中已有的函数或者某一个函数的内容,下面就介绍一下如何查询函数。 和存储过程类似,这也需要使用到数据字典user_s…

Spring - 4 ( 11000 字 Spring 入门级教程 )

一:Spring IoC&DI 在前⾯的章节中, 我们学习了 Spring Boot 和 Spring MVC 的开发, 可以完成⼀些基本功能的开发了, 但是什么是 Spring 呢? Spring, Spring Boot 和 SpringMVC 又有什么关系呢? 咱们还是带着问题去学习.我们先看什么是Spring 1.1 Spring 是什…

更新至2022年上市公司数字化转型数据合集(四份数据合集)

更新至2022年上市公司数字化转型数据合集(四份数据合集) 一、2000-2022年上市公司数字化转型数据(年报词频、文本统计) 二、2007-2022年上市公司数字化转型数据(年报和管理层讨论)(含原始数据…

微前端是如何实现作用域隔离的?

微前端是如何实现作用域隔离的? 一、前言 沙箱(Sandbox)是一种安全机制,目的是让程序运行在一个相对独立的隔离环境,使其不对外界的程序造成影响,保障系统的安全。作为开发人员,我们经常会同沙…

UE5 GAS开发P35,36,37,38,39 将药水修改为AbilitySystem效果

这几节课都是将药水修改成更方便使用的AbilitySystem效果的Actor,分别为增加血量,增加蓝量,暂时获得最大生命值上限 AuraEffectActor.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #…

介绍一个开源IOT组态项目

项目介绍 金合可视化平台是一款强大而操作简便的低代码平台,专为满足物联网领域的可视化开发需求而设计。通过该平台,用户可以利用拖拽配置的方式,轻松创建个性化的可视化大屏,无需熟练的编程技能,大幅提高了开发效率。…

图搜索的经典启发式算法A星(A*、A Star)算法详解

文章目录 1. 引言2. 广度优先搜索3. Dijkstra 算法4. 启发式优先搜索(Heuristic)4.1 贪心最佳优先搜索4.2 A*搜索 1. 引言 在许多场景中,我们常会遇到一类问题,即“找到一个位置到另一个位置的距离最短(用时最少&…

使用 Rust 后,我​​使用 Python 的方式发生了变化

使用 Rust 后,我​​使用 Python 的方式发生了变化 Using type hints where possible, and sticking to the classic “make illegal state unrepresentable” principle. 尽可能使用类型提示,并坚持经典的“使非法状态不可表示”原则。 近年来&#xff…

【Pytorch】(十三)PyTorch模型部署: TorchScript

文章目录 (十三)PyTorch模型部署Pytorch动态图的优缺点TorchScriptPytorch模型转换为TorchScripttorch.jit.tracetorch.jit.scripttrace和script的区别总结script 和 trace 混合使用保存和加载模型 (十三)PyTorch模型部署 Pytorc…

科学高效备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析

如何科学、有效地备考AMC8、AMC10美国数学竞赛?多做真题,吃透真题是科学有效的方法之一,通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的…

成功解决ImportError: cannot import name ‘builder‘ from ‘google.protobuf.internal

成功解决ImportError: cannot import name builder from google.protobuf.internal 目录 解决问题 解决思路 解决方法 解决问题 ImportError: cannot import name builder from google.protobuf.internal 解决思路 导入错误:无法从“google.protobuf.internal”导入名称“…

在React函数组件中使用错误边界和errorElement进行错误处理

在React 18中,函数组件可以使用两种方式来处理错误: 使用 ErrorBoundary ErrorBoundary 是一种基于类的组件,可以捕获其子组件树中的任何 JavaScript 错误,并记录这些错误、渲染备用 UI 而不是冻结的组件树。 在函数组件中使用 ErrorBoundary,需要先创建一个基于类的 ErrorB…

网络通信安全

一、网络通信安全基础 TCP/IP协议简介 TCP/IP体系结构、以太网、Internet地址、端口 TCP/IP协议简介如下:(from文心一言) TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议&#xff0…

用友NC Cloud importhttpscer接口任意文件上传漏洞

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、漏洞描述 用友NC Cloud的importhttpscer接口如果存在任意文件上传…

开源文本嵌入模型M3E

进入正文前,先扯点题外话 这两天遇到一个棘手的问题,在用 docker pull 拉取镜像时,会报错: x509: certificate has expired or is not yet valid 具体是下面👇这样的 rootDS918:/volume2/docker/xiaoya# docker pul…

恒峰智慧科技—森林守护者:森林消防泵如何助力灭火?

在茂密的森林中,一场突如其来的火灾可能带来无法估量的破坏。幸运的是,森林消防泵的出现,帮助我们对抗这些威胁。本文将深入探讨森林消防泵如何在灭火工作中发挥重要作用。 一、森林消防泵的功能和重要性: 首先,我们需…

探索人工智能的边界:GPT 4.0与文心一言 4.0免费使用体验全揭秘!

探索人工智能的边界:GPT与文心一言免费试用体验全揭秘! 前言免费使用文心一言4.0的方法官方入口进入存在的问题免费使用文心一言4.0的方法 免费使用GPT4.0的方法官方入口进入存在的问题免费使用GPT4.0的方法 前言 未来已来,人工智能已经可以…

Matlab|基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理

1 主要内容 该程序复现《基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理》模型,建立运营商和多虚拟电厂的一主多从博弈模型,研究运营商动态定价行为和虚拟电厂能量管理模型,模型为双层,首先下层模型中,构建…