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

news2024/9/29 19:21:59

一  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.coloradmin.cn/o/906238.html

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

相关文章

ubuntu 20.04 安装 高版本cuda 11.7 和 cudnn最新版

一、安装显卡驱动 参考另一篇文章:Ubuntu20.04安装Nvidia显卡驱动教程_ytusdc的博客-CSDN博客 二、安装CUDA 英伟达官网(最新版):CUDA Toolkit 12.2 Update 1 Downloads | NVIDIA Developer CUDA历史版本下载地址:C…

上网课用什么耳机和麦克风,分享几款骨传导耳机上网课用

各位耳机狂热者,咱们都了解传统的蓝牙耳机相对于老式有线耳机来说确实方便得多。但是,也别忘了蓝牙耳机会导致耳道不断堵塞,引发细菌滋生等问题。好在近年来,骨传导耳机如火如荼地走红,解决了这些难题,简直…

selenium Chrome驱动下载地址

Chrome驱动官方最新版下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 有稳定版,开发版等版本可以选择下载 选择 操作系统复制下载链接直接下载

Hyperf 如何做到用两个端口 9501/9502 都能连接 Websocket 服务以及多 Worker 协作实现聊天室功能

为何 Hyperf 能够在两个端口上监听 WebSocket 连接? 源码角度来看,在配置了多个 Servers 时,实际上,只启动了一个 Server 注:我之前接触的代码都是启动一个服务绑定一个端口,之前也看过 swoole 扩展的文档…

这种隐形行为,酒店管理需警惕!

当火灾爆发时,及早的警报和响应可以挽救生命并减少财产损失。烟感监控系统作为一种关键设施,通过检测空气中的烟雾,能够在火灾初期就发出警报,为人们提供宝贵的时间来采取紧急措施。 烟感监控在各种场所如住宅、商业建筑、工厂等都…

机器人制作开源方案 | 滑板助力器

我们可以用一块废滑板做些什么呢? 如今,越来越多的人选择电动滑板作为代步工具或娱乐方式,市场上也涌现出越来越多的电动滑板产品。 (图片来源:Backfire Zealot X Belt Drive Electric Skateboard– Backfire Boards…

磁铁的吸力与磁吸器件

目前磁铁很多的应用是利用其同极相斥异极相吸以及对铁磁性物质吸附的原理,如各类磁吸器件、磁性连接结构、磁选设备、磁传动设备等。 对于磁吸类的应用,大家都非常关注磁铁的吸力。磁铁的吸力是可以计算的,有如下公式可以参考,但…

深入浅出 TCP/IP 协议栈

TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下…

【Spring Boot】JdbcTemplate数据连接模板 — 使用JdbcTemplate操作数据库

使用JdbcTemplate操作数据库 成功在Spring Boot项目中集成JdbcTemplate后,如何使用JdbcTemplate数据库连接模板操作数据库呢?接下来以示例演示JdbcTemplate实现学生信息的增、删、改、查等操作,让我们在实践中边学边用,更好地理解…

Maven之Servlet 版本问题

maven-archetype-webapp 骨架的 Servlet 版本问题 通过 maven-archetype-webapp 骨架去创建 java web 项目时,自动生成的 web.xml 配置文件所使用的 Servlet 的版本比较低(2.3),而在低版本的 Servlet 中 EL 表达式默认是关闭的。…

stack和queue的模拟实现

stack和queue的模拟实现 容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的缺陷 stack模拟实现queue模拟实现priority_queuepriority_queue的使用priority_queue的模拟实现 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复…

深入解析:如何打造高效的直播视频美颜SDK

在当今数字化时代,视频直播已经成为人们交流、娱乐和信息传递的重要方式。然而,许多人在直播时都希望能够呈现出最佳的外观,这就需要高效的直播视频美颜技术。本文将深入解析如何打造高效的直播视频美颜SDK,以实现令人满意的视觉效…

磁盘格式化工具的详细指南!一文看懂五分钟搞定

什么是磁盘格式化工具? 磁盘格式化工具是一种软件,可让你擦除硬盘上的所有数据(包括操作系统),并为新数据做好准备。格式化硬盘是提高电脑性能并消除你可能遇到的问题的好方法。 使用磁盘格式化工具有什么好处&am…

NineData x SelectDB 完成产品兼容互认证

近日,新一代实时数据仓库厂商 SelectDB 与云原生智能数据管理平台 NineData 完成产品兼容互认证。经过严格的联合测试,双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。基于本次的合作,双方将进一步为数据管理与大数据分析业务…

Blazor前后端框架Known-V1.2.13

V1.2.13 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…

微信ipad协议

前言 微信协议就是基于微信IPad协议的智能控制系统,利用人工智能AI技术、云计算技术、虚拟技术、边缘计算技术、大数据技术, 打造出智能桌面系统RDS、 智能聊天系统ACS 、智能插 件系统PLUGIN 、云计算服务CCS 、 任务管理系统TM、设备管理服务DM、 应…

Webpack 配置多入口

1、配置多入口 entry index 和 other 为入口名称,即页面名称 2、配置出口 output filename 中的 [name] 对应入口的文件名 contentHash 会命中缓存,提高性能 3、配置插件 htmlWebpackPlugin,生成多页面 htmlWebpackPlugin 插件会生成页…

【大虾送书第六期】搞懂大模型的智能基因,RLHF系统设计关键问答

目录 ✨1、RLHF是什么? ✨2、RLHF适用于哪些任务? ✨3、RLHF和其他构建奖励模型的方法相比有何优劣? ✨4、什么样的人类反馈才是好的反馈 ✨5、RLHF算法有哪些类别,各有什么优缺点? ✨6、RLHF采用人类反馈会带来哪些局…

Swagger2 使用

大家好 , 我是苏麟 , 今天带来Swagger的使用 . 官方文档 : 招摇文档 (swagger.io) 访问地址 : 在路径后加上doc.html 例如: http://localhost:8000/doc.html Swagger 使用 依赖 <!--Swagger依赖 核心--><dependency><groupId>io.springfox</groupId&g…