为什么说 Redis 是单线程的?——Java全栈知识(25)

为什么说 Redis 是单线程的?

我们常说的 Redis 是单线程的,但是我前面在讲持久化机制的时候又说 RDB 的持久化是通过主进程 fork 出一个子进程来实现 RDB 持久化。那么 Redis 到底是多线程还是单线程的呢?
Redis 的网络 IO 和键值的读写是单线程完成的。
但是在 Redis4.0 之后,Redis 引入了多线程模型,但是 IO 部分还是由单线程完成,而其他的如持久化存储模块、集群支撑模块等是多线程的。(Redis 6.0 之后将网络 IO 改为了多线程)

[!info]
前面我们讲到的 RDB 持久化,以及 Redis 集群支撑都是基于多线程完成的

1、多线程的好处

多线程的好处在于能够更大程度的利用 CPU 资源以及 IO 资源。
首先 Redis 是否需要提升 CPU 利用?
我们都知道 Redis 是基于内存的数据库,CPU 的资源不是 Redis 的性能瓶颈
所以,通过多线程技术来提升 Redis 的 CPU 利用率这一点是完全没必要的。

那么,使用多线程技术来提升 Redis 的 l/O 利用率呢?是不是有必要呢?
Redis 确实是一个 I/O 操作密集的框架,他的数据操作过程中,会有大量的网络 I/O 和磁盘 I/O 的发生。要想提升 Redis 的性能,是一定要提升 Redis 的 I/O 利用率的,这一点毋膏置疑。
但是,提升 I/O 利用率,并不是只有采用多线程技术这一条路可以走。
image.png|700
Redis 基于 I/O 多路复用来提高 IO 利用率。

2、多线程的坏处

我们都知道 Java 针对并发安全做出了很多的方案。如内存模型、锁、CAS 等,这些者都是 Java 中提供的一些在多线程情况下保证线程安全的技术。
和 Java 类似,所有支持多线程的编程语言或者框架,都不得不面对的一个问题,就是如何解决多线程编程模式带来的共享资源的并发控制问题。
虽然,采用多线程可以帮助我们提升 CPU 和I/O 的利用率,但是多线程带来的并发问题也给这些语言和框架带来了更多的复杂性。而且,多线程模型中,多个线程的互相切换也会带来一定的性能开销。
所以,在提升I/O 利用率这个方法上,Rdis 并没有采用多线程技术,而是选择了多路复用 I/O 技术。

3、Redis 是否需要多线程?

6.0 之前没使用多线程原因:

  1. Redis 是基于内存的, 执行速度非常快,CPU 资源不是瓶颈。
  2. 采用多线程,避免不必要的上下文切换,避免线程不安全的问题。
  3. 采用了 I/O 多路复用,非阻塞式 IO。
    引入多线程的原因:
  4. 随着业务的越来越复杂,Redis 的网络 IO 还是成为了最大的瓶颈。
  5. Redis 6.0 的多线程,只是在处理网络 IO 处使用,在执行命令依然是单线程

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

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

相关文章

数据库|基于T-SQL创建数据库

哈喽,你好啊,我是雷工! SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL。 本节学习基于T-SQL创建数据库。以下为学习笔记。 01 打开新建查询 首先连接上数据库,点击【新建查询】打开新建查询窗口, …

C++—结构体

结构体(struct),是一种用户自定义复合数据类型,可以包含不同类型的不同成员。 结构体的声明定义和使用的基本语法: // 声明结构体struct 结构体类型 { 成员1类型 成员1名称; ...成员N类型 成员N名称; };除声明…

【计算机视觉(2)】

基于Python的OpenCV基础入门——视频的处理 视频OpenCV视频处理操作:创建视频对象判断视频是否成功初始化读取视频帧获取视频特征设置视频参数声明编码器保存视频释放视频对象 视频处理基本操作的代码实现: 视频 视频是由一系列连续的图像帧组成的。每一…

Spring—IoC

目录 1. IoC的提出 2. Spring容器 2.1. Spring容器实现原理 2.2. Spring组件 2.2.1 XML标签方式 2.2.2. 类注解方式 2.2.3. 方法注解方式 2.3. Spring容器分类 2.3.1. BeanFactory容器 2.3.2. ApplicationContext容器 2.3.3. WebApplicationContext容器 3. Spring中…

Srping 历史

一、History of Spring and the Spring Framework Spring came into being in 2003 as a response to the complexity of the early J2EE specifications. While some consider Java EE and its modern-day successor Jakarta EE to be in competition with Spring, they are …

idea启动报错:java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory

文章目录 一、问题二、解决方法 一、问题 问题描述:idea整合Mybatis-plus的时候,启动报错:java.lang.NoClassDefFoundError: org/mybatis/logging/LoggerFactory 二、解决方法 可能原因:仔细检查了一下,发现 mybati…

《王者荣耀》4月狂揽2.34亿美元 单日流水1亿美元 全球销量第二

易采游戏网5月24日消息,在刚刚过去的四月,全球手游市场迎来了一场收益的盛宴,其中《王者荣耀》以其惊人的吸金能力,以2.34亿美元的月收入在全球手游排行榜上位列第二。4月5日,这款由腾讯游戏开发的多人在线战斗竞技游戏…

C++相关概念和易错语法(14)(初始化注意事项、vector、编译器向上查找规则)

1.当我们在代码中想要终止运行的话,我们可以采用Ctrl C或Ctrl Z,其中^C代表杀进程,^Z设置结束2.编码表:我们目前比较熟悉的是ASCII码编码方式,但是我们发现平时使用的汉字无法通过ASCII编码,除此之外&…

自动化测试用例结构

标准的用例结构: 用力标题前提条件用例步骤预期结果实际结果 测试用例对比:

酷开系统 | 酷开科技把握智慧先机 AI赋能家庭场景

智慧化是当今世界科技发展的前沿领域之一。现在的智慧化,也正在逐步成为我们日常生活的一部分。电视系统也进入了数字化时代,AI的应用正在不断扩展,其潜力似乎无穷无尽。 酷开科技深耕人工智能技术,在提升语音体验、强化智能家居…

第二证券:新股申购配号数什么意思?

股配号数量便是我们参与抽签的数量,投资者申购新股之后,交易所会根据持有的股票市值进行配号。 投资者的市值越大,申购新股的配号越多,其中签机会越大。主板、创业板、科创板一个申购单位是500股,意味着1万元的市值有…

Java 定义类型处理MySQL point类型数据

1.三个类来处理 引入maven依赖 <!-- 引入 jts 库解析 POINT --><dependency><groupId>com.vividsolutions</groupId><artifactId>jts</artifactId><version>1.13</version></dependency>import javax.validation.constr…

【C++入门】—— C++入门 (下)_内联函数

前言&#xff1a;在了解完前面的C基础内容后&#xff0c;马上我们就要真正不如C的学习了&#xff0c;但在之前让我们最后了解最后一点点C入门知识&#xff01;来迟的520特别篇&#xff01; 本篇主要内容&#xff1a; 内联函数 auto关键字 范围for 指针空值nullptr C入门 1. 内联…

智慧医疗时代:探索互联网医院开发的新篇章

在智慧医疗时代&#xff0c;互联网医院开发正引领着医疗服务的创新浪潮。通过将先进的技术与医疗服务相结合&#xff0c;互联网医院为患者和医生提供了全新的互动方式&#xff0c;极大地提升了医疗服务的便捷性和效率。本文将深入探讨互联网医院的开发&#xff0c;介绍其技术实…

一键部署!QQ AI 聊天机器人!支持ChatGPT、文心一言、讯飞星火、Bing、Bard、ChatGLM、POE,多账号,人设调教

随着人工智能技术的不断发展&#xff0c;智能聊天机器人已经成为我们日常生活中不可或缺的一部分。ChatGPT作为一款强大的人工智能聊天模型&#xff0c;能够为我们提供高效、便捷的聊天体验。那么&#xff0c;如何将ChatGPT接入QQ&#xff0c;实现智能聊天新体验呢&#xff1f;…

OTP8脚-全自动擦鞋机WTN6020-低成本语音方案

一&#xff0c;产品开发背景 首先&#xff0c;随着人们生活质量的提升&#xff0c;对鞋子的保养需求也日益增加。鞋子作为人们日常穿着的重要组成部分&#xff0c;其清洁度和外观状态直接影响到个人形象和舒适度。因此&#xff0c;一种能够自动清洁和擦亮鞋子的设备应运而生&am…

局部直方图均衡化去雾算法

目录 1. 引言 2. 算法流程 3. 代码 4. 去雾效果 1. 引言 局部直方图算法是一种基于块的图像去雾方法&#xff0c;它将图像分割为若干个块&#xff0c;并在每个块内计算块的局部直方图。通过对各个块的直方图进行分析和处理&#xff0c;该算法能够更好地适应图像中不同区域的…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-16讲 EPIT定时器

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

再谈Google I/O 2024:开发者必看亮点

在2024年Google I/O大会上&#xff0c;谷歌发布了许多令人兴奋的新技术和工具。本文将重点介绍其中的三大亮点&#xff1a;新一代TPU、Gemma模型以及Firebase GenKit。这些工具和技术对于开发者来说&#xff0c;将会带来前所未有的便利和强大功能。 新一代TPU&#xff1a;Tril…

在MySQL数据库中的视图和事务。

视图 view 临时表 作用&#xff1a;优化多表查询的效率 可以将经常使用的连接查询结果使用视图进行保存&#xff0c;避免多次重复的笛卡尔积运算 MySQL数据库在多表查询的时候会自动进行笛卡尔积运算。 如果将来经常要用到某一个多表查询的结果就可以使用视图将这个结果…