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

news2024/11/15 12:38:00

为什么说 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.coloradmin.cn/o/1685405.html

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

相关文章

爬虫学习--11.MySQL数据库的基本操作(上)

MySQL数据库的基本操作 创建数据库 我们可以在登陆 MySQL 服务后,使用命令创建数据库,语法如下: CREATE DATABASE 数据库名; 显示所有的数据库 show databases; 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删…

java中的StringBuffer类和StringBuildet类

一、StringBuffer类 1、特点 底层是不被final修饰的char数组value,数组地址可以发生改变,当StringBuffer类对象的值发生改变时不用创建新的对象 2、构造方法 3、扩容规则 StringBuffer的底层数组value在扩容时为当前数组的长度2倍加2或者当前数组长度加上要追加…

CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)

OpenWrt是一款应用于嵌入式设备如路由器等的Linux操作系统。类似于kali等linux系统中的apt-get等,该系统中下载应用使用的是opgk工具,其通过非加密的HTTP连接来下载应用。但是其下载的应用使用了SHA256sum哈希值来进行检验,所以将下载到的数据…

如何将短信从 iPhone 传输到计算机 - 5 种灵活的方式

概括 与他人交流的多种方式之一是发送短信。对于那些包含珍贵回忆或重要信息的消息,您需要将它们发送到另一台设备(例如计算机)进行备份。将短信文件发送到计算机是保存宝贵数据的最佳方法之一。继续阅读本文,了解如何将短信从 i…

深度学习 | 复杂注意力神经网络 —— 大模型

前面讲解了注意力神经网络 一、BERT模型 1、什么是BERT 它是由谷歌在2018年提出的 双向Transformer 编码器模型。 Bidirectional Encoder Representations from Transformers. 主要使用了Transformer的编码器 Transformer 编码器堆叠; 预训练 精调两步结构。 BERT…

FreeBSD/Linux下的系统资源监视器排队队

bpytop bpytop 是一个基于 Python 的资源监视器,可以在 FreeBSD 上使用。它提供了对文件写入磁盘、网络、CPU 和内存占用的监视功能。 pkg install bpytop 或者用ports安装 cd /usr/ports/sysutils/bpytop/ make install clean bashtop bashtop 也是一个基于 P…

微服务如何做好监控

大家好,我是苍何。 在脉脉上看到这条帖子,说阿里 P8 因为上面 P9 斗争失败走人,以超龄 35 被裁,Boss 上找工作半年,到现在还处于失业中。 看了下沟通记录, 沟通了 1000 多次,但没有一个邀请投递…

AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情

电视猫上面有《庆余年》分集剧情&#xff0c;如何批量爬取下来呢&#xff1f; 先找到每集的链接地址&#xff0c;都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 这个…

Redis篇 浅谈分布式系统

分布式系统 一. 单机架构二.分布式系统引入三.引入更多的应用服务器四.读写分离五.引入缓存服务器六. 将数据库服务器拆分七.微服务架构 一. 单机架构 单机架构,就是用一台服务器,完成所有的工作. 这时候就需要我们引入分布式系统了. 分布式系统是什么含义呢?就是由一台主机服…

Webpack源码泄露到Vue快速入门

前言 1.webpack 源码泄露 1.1漏洞简介 1.2存在泄露的站点 1.3 如何判断是否存在漏洞 方法1: 方法2: 1.4.如何将js.map文件还原为项目文件 1. 4.1查看npm版本 1.4.2 安装reverse-sourcemap 1. 4.3.检查是否安装 ​1. 4.4 使用reverse-sourcemap进行js.map文件还原操作…

二、信号连接槽函数

需求&#xff1a;点击Button按钮&#xff08;下班&#xff09;&#xff0c;label显示淦饭 信号发出者&#xff1a;Button 发送的信号&#xff08;signals&#xff09;&#xff1a;被点击 信号接收者&#xff1a;label 信号的处理&#xff08;slots&#xff09;&#xff1a;显示…

Rocketmq集群再搭建

注意上面这个官方架构是 主从模式&#xff0c;还无法做到高可用&#xff0c;因为master节点宕机&#xff0c;从节点没法变成主节点&#xff0c;需要人工重启&#xff0c;够用了。 1. 先准备1台虚拟机&#xff0c;装好1台再克隆2台 根据上面的图&#xff0c;3台机器中有一台…

【再探】Java—泛型

Java 泛型本质是参数化类型&#xff0c;可以用在类、接口和方法的创建中。 1 “擦除式”泛型 Java的“擦除式”的泛型实现一直受到开发者的诟病。 “擦除式”的实现几乎只需要在Javac编译器上做出改进即可&#xff0c;不要改动字节码、虚拟机&#xff0c;也保证了以前没有使…

MVVM_MVVMLight架构

介绍 MVVMLight是一个实现MVVM模式的轻量级框架&#xff08;相对于Prism&#xff09;&#xff0c;能够更好的帮助我们开发WPF Windows Phone、Windows 8、SilverLight相关项目。 安装 在NuGet 工具箱上搜索MVVMLight进行下载 下载后它帮你生成ViewModel文件夹&#xff0c;里面…

深度学习之基于Tensorflow卷积神经网络脑肿瘤分类识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 脑肿瘤是医学领域的一个重要问题&#xff0c;对人类的健康构成了严重威胁。传统的脑肿瘤分类识别方法…

老的 IIS + MSSQL 网站迁移实例

因为公司需要从云上迁移回本地&#xff0c;但云平台不愿意导出虚拟机文件&#xff0c;所以公司需要手工迁移。 查看了一下云主机&#xff0c;安装了IIS&#xff0c;还有MSSQL数据库&#xff0c;于是在本地搭建好相同的OSIISMSSQL 环境&#xff0c;在把数据库导入完成、 IIS 搭建…

AcWing 217:绿豆蛙的归宿 ← 搜索算法

【题目来源】https://www.acwing.com/problem/content/219/【题目描述】 给出一个有向无环的连通图&#xff0c;起点为 1&#xff0c;终点为 N&#xff0c;每条边都有一个长度。 数据保证从起点出发能够到达图中所有的点&#xff0c;图中所有的点也都能够到达终点。 绿豆蛙从起…

iptables防火墙【☆】

一、防火墙的基础 防火墙分为硬件防火墙和软件防火墙&#xff0c;硬件防火墙有专门的设备&#xff1a;如国产华为、绿盟等&#xff0c;作为网关层做地址转换等安全防护。很多公司基本都会使用硬件防火墙做第一道防御&#xff0c;在核心业务上再添加软件防火墙提高安全性能…

Tailwind CSS快速入门

文章目录 初识安装Tailwindcss试用安装快速书写技巧扩展好处Todo 初识 只需书写 HTML 代码&#xff0c;无需书写 CSS&#xff0c;即可快速构建美观的网站 Tailwind CSS 是一个功能类优先的 CSS 框架&#xff0c;它通过提供大量的原子类&#xff08;utility classes&#xff09;…

国产操作系统上使用SQLynx连接数据库 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上使用SQLynx连接数据库 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何在国产操作系统上使用SQLynx。这是一款功能强大的数据库管理工具&#xff0c;可以帮助用户高效地管理和操作数据库。本文将详细介绍…