【Redis】为什么是单线程?为什么这么快呢?

Redis为什么是单线程?为什么这么快?

Redis,作为一款高性能的内存数据库,广泛应用于各类高并发、高性能的场景中。一个常见的问题是,为什么Redis是单线程的?以及在单线程的情况下,Redis为什么还能保持如此高的速度?

1、Redis是不是单线程?Redis为什么是单线程的而不采用多线程呢?

这主要是基于一种客观原因来考虑的。因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)

1.1、Redis单线程的优劣势

单进程单线程优势

  • 代码更清晰,处理逻辑更简单
  • 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  • 不存在多进程或者多线程导致的切换而消耗CPU

单进程单线程弊端

  • 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

1.2 、为什么redis是单线程还能支持高并发呢?

redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。

文件事件处理器:采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择

对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

  • 多个 socket
  • IO 多路复用程序
  • 文件事件分派器
  • 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队

列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理。

2、为啥edis单线程模型也能效率这么高?

  1. 纯内存操作

Redis的数据存储在内存中,读写操作非常快速。相比传统的基于磁盘的数据库,内存操作的延迟要低得多。这是Redis高性能的基础。

  1. 非阻塞IO多路复用机制

Redis采用了非阻塞IO多路复用机制,。底层是使用epooll+,把读写存都转换为事件,减少时间浪费。这种机制允许单个线程同时处理多个网络连接和IO操作,极大地提高了并发处理能力。底层通过将读写操作转换为事件,减少了时间浪费。

  1. 单线程避免了上下文切换和锁竞争

单线程模型避免了多线程环境下的上下文切换和锁竞争问题。上下文切换会带来额外的开销,而锁竞争可能导致性能瓶颈。单线程模型下,所有操作都是顺序执行的,无需加锁和解锁,避免了这些问题,也不存在多进程或者多线程导致的切换而消耗 CPU。。

Redis的数据结构并不全是简单的Key-Value,还有list,hash等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除一个对象。这些操作可能就需要加非常多的锁,导致的结果是同步开销大大增加。

  1. 高效的数据结构和算法

Redis内部使用了多种高效的数据结构和算法,例如哈希表、跳表、压缩列表等。这些数据结构设计精良,操作复杂度低,能够在O(1)或者O(log N)时间内完成大部分操作,进一步提升了性能。

  1. 基于vm的

Redis处理的速度很快,因为它是基于虚拟内存(VM的,并没VM没有使用os的交互方式。

关于VM与OS

有时有人会提到Redis的速度是因为它基于某种虚拟内存(VM),并且没有使用操作系统的交互方式。实际上,这是一种误解,Redis的虚拟内存(VM)机制与操作系统的虚拟内存有显著不同。Redis曾使用一种将不常用数据交换到磁盘的机制,并对数据进行压缩,减少I/O操作。与此不同,操作系统的虚拟内存基于4KB页面,这种粒度对于小对象来说过大,且会导致阻塞线程。因此,Redis通过压缩和非阻塞处理机制,提高了性能,而操作系统的虚拟内存管理可能带来响应延迟。尽管Redis后来弃用了虚拟内存机制,但其设计理念仍然有助于理解其高性能特点。

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

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

相关文章

港科夜闻 | 香港科大与香港科大(广州)合推红鸟跨校园学习计划,共享教学资源,促进港穗学生交流学习...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与香港科大(广州)合推“红鸟跨校园学习计划”,共享教学资源,促进港穗学生交流学习。香港科大与香港科大(广州)6月14日共同宣布推出“红鸟跨校园学习计划”,以进一步加强两校学…

Linux 上的 TTY 是什么?

在 Linux 系统中,TTY(Teletypewriter 的缩写)是一个代表终端设备的概念。TTY 是 Linux 操作系统中的一个重要部分,它允许用户与系统进行交互。下面详细讲述 TTY 的相关知识。 TTY 的历史背景 TTY 最早起源于电传打字机&#xff…

【stm32】——基于I2C协议的OLED显示

目录 一、I2C通讯 二、U8G2 1.U8g2简介 2.CubexMX配置 3.移植U8g2 4.编写移植代码 三、显示汉字 四、字体滚动 五、图片显示 总结 一、I2C通讯 IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设…

零代码本地搭建AI大模型,详细教程!普通电脑也能流畅运行,中文回答速度快,回答质量高

这篇教程主要解决: 1). 有些读者朋友,电脑配置不高,比如电脑没有配置GPU显卡,还想在本地使用AI; 2). Llama3回答中文问题欠佳,想安装一个回答中文问题更强的AI大模型。 3). 想成为AI开发者,开…

智能识别技术在旧物回收系统中的优化策略

内容概要: 智能识别技术在旧物回收系统中的应用已经取得了显著的成效,但如何进一步优化其性能以提高回收效率和准确性,仍是我们需要探讨的问题。本文将针对智能识别技术在旧物回收系统中的优化策略进行探讨。 一、算法优化 算法是智能识别…

【好书分享第十一期】深入Rust标准库(文末送书)

文章目录 作者简介概括书籍特色知名大V推荐带来的成长受众人群内容脉络粉丝福利 作者简介 任成珺 拥有超过20年的系统级程序架构及开发经验,至今仍活跃在开发一线。 王晓娜 博士,任职于中国兵器工业集团公司北方科技信息研究所,善于深入浅出…

实战篇:数据展示与报表生成

实战篇:数据展示与报表生成 数据展示与报表生成简介 数据展示是将数据以表格、图形或其他形式展示给用户的过程。报表生成则涉及创建包含特定数据集的文档,通常用于打印或分发。 项目结构 继续使用之前讨论的Flask项目结构。 第1步:数据…

操作符详解(2)

上次我们讲了算术操作符 加减乘除取模 除号 如果你想得到整数,那么两边必须是整数,如果你想得到浮点数,那么你的操作数的两端必须有一个是浮点数 而取模% 两边必须是整数,返回的是整除后的余数 然后我们还讲了左移和右移操作…

Meta-Llama-3-8B 部署

Meta-Llama-3-8B 模型文件地址 LLaMA-Factory 仓库地址 Download Ollama conda create -n llama8b_ python3.10 -y conda activate llama8b pip install -r requirements.txt -i https://pypi.mirrors.ustc.…

搭建Python虚拟环境(二):venv和virtualenv

下面继续详细介绍各种创建虚拟环境的方式 使用 venv 创建Python虚拟环境 在Python开发中,虚拟环境是一个非常重要的概念。它允许我们为每个项目创建独立的环境,这样可以避免不同项目之间的依赖包冲突。venv 是Python用于创建虚拟环境的标准库之一。本文…

网络安全练气篇——OWASP TOP 10

1、什么是OWASP? OWASP(开放式Web应用程序安全项目)是一个开放的社区,由非营利组织 OWASP基金会支持的项目。对所有致力于改进应用程序安全的人士开放,旨在提高对应用程序安全性的认识。 其最具权威的就是“10项最严重…

浔川身份证号码查询——浔川python科技社

Python获取身份证信息 公民身份号码是每个公民唯一的、终身不变的身份代码,由公安机关按照公民身份号码国家标准编制。每一个居民只能拥有一个唯一的身份证,它是用于证明持有人身份的一种法定证件。 身份证包含了个人的一些重要信息,比如&am…

2024年哪4种编程语言最值得学习?看JetBrains报告

六个月前,编程工具界的大牛JetBrains发布了他们的全球开发者年度报告。 小吾从这份报告中挑出了关于全球程序员过去一年使用编程语言的情况和未来的采纳趋势,总结出2024年最值得学习的四种编程语言。一起来看看吧。 JetBrains在2023年中开始,就向全球的编程达人们发出了问卷…

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意: 此时vue没有_data,即:data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意: 因为没有template选项,所以,整个div root都…

论文学习day01

1.自我反思的检索增强生成(SELF-RAG) 1.文章出处: Chan, C., Xu, C., Yuan, R., Luo, H., Xue, W., Guo, Y., & Fu, J. (2024). RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation. ArXiv, abs/2404.00610. 2.摘…

Nginx基础理论

Nginx最为最受欢迎的反向代理和负载均衡服务器,被广泛的应用于互联网项目中。这不仅仅是因为Nginx本身比较轻量,更多的是得益于Nginx的高性能特性,以及支持插件化开发,为此,很多开发者或者公司基于Nginx开发出了众多的…

Mysql都有哪些数据类型?

MySQL 支持多种数据类型,这些数据类型定义了存储在数据库中的数据的种类。以下是 MySQL 中常见的数据类型分类及其示例: 数值类型 整数类型 TINYINT:非常小的整数,带符号的范围是 -128 到 127,无符号的范围是 0 到 …

监控易监测对象及指标之:全面监控MongoDB 5数据库

随着企业数据量的持续增长,数据库的性能和稳定性对于保障业务连续性至关重要。MongoDB 5作为一款流行的NoSQL数据库,以其灵活的文档模型和强大的扩展能力,在各类业务场景中发挥着关键作用。 为了确保MongoDB 5数据库的稳定运行和高效性能&…

CCAA质量管理【学习笔记】​ 备考知识点笔记(一)

第一部分 质量管理体系相关标准 《质量管理体系基础考试大纲》中规定的考试内容: 3.1质量管理体系标准 a) 了解 ISO 9000 系列标准发展概况; b) 理 解 GB/T19000 标准中涉及的基本概念和质量管理原则; c) 理 解GB/T19000 标准中的部分…

论文阅读笔记:Instance-Aware Dynamic Neural Network Quantization

论文阅读笔记:Instance-Aware Dynamic Neural Network Quantization 1 背景2 创新点3 方法4 模块4.1 网络量化4.2 动态量化4.3 用于动态量化的位控制器4.4 优化 5 效果 论文:https://openaccess.thecvf.com/content/CVPR2022/papers/Liu_Instance-Aware_…