当前位置:首页 > 数据库 > 正文内容

Redis终究为什么这么快?

邻居的猫1个月前 (12-09)数据库1834

Redis为什么这么快?

  1. 彻底依据内存,数据存在内存中,绝大部分恳求是朴实的内存操作,十分快速,跟传统的磁盘文件数据存储比较,防止了经过磁盘IO读取到内存这部分的开支。
  2. 数据结构简略,对数据操作也简略。【Redis中的数据结构】是专门进行规划的,每种数据结构都有一种或多种数据结构来支撑。Redis正是依靠这些灵敏的数据结构,来提高读取和写入的功能。
  3. 选用单线程,省去了许多上下文切换的时刻以及CPU耗费,不存在竞赛条件,不用去考虑各种锁的问题,不存在加锁开释锁操作,也不会呈现死锁而导致的功能耗费。
  4. Redis直接自己构建了VM 机制 ,防止调用体系函数的时分,浪费时刻去移动和恳求
  5. Redis 选用了 I/O 多路复用机制处理很多的客户端 Socket 恳求,【IO 多路复用机制】是指一个线程处理多个 IO 流,便是咱们常常听到的 select/epoll 机制。简略来说,在 Redis 只运转单线程的情况下,该机制答应内核中,一起存在多个监听 Socket 和已衔接 Socket。内核会一向监听这些 Socket 上的衔接恳求或数据恳求。一旦有恳求抵达,就会交给 Redis 线程处理,这就完成了一个 Redis 线程处理多个 IO 流的作用。

Redis 依据 Reactor 形式开发了自己的网络事情处理器,这个处理器被称为文件事情处理器 file event handler。由于这个文件事情处理器是单线程的,所以Redis才叫做单线程的模型,可是它选用IO多路复用机制一起监听多个Socket,并依据Socket上的事情来挑选对应的事情处理器进行处理。文件事情处理器的结构包括4个部分,线程模型如下图:

多个 Socket 或许会发生不同的操作,每个操作对应不同的文件事情,可是IO多路复用程序会监听多个Socket,将Socket发生的事情放入行列中排队,事情分配器每次从行列中取出一个事情,把该事情交给对应的事情处理器进行处理。

Redis客户端对服务端的每次调用都阅历了发送指令,履行指令,回来成果三个进程。其间履行指令阶段,由于Redis是单线程来处理指令的,一切每一条抵达服务端的指令不会马上履行,一切的指令都会进入一个行列中,然后逐一被履行。并且多个客户端发送的指令的履行次序是不确认的。可是能够确认的是不会有两条指令被一起履行,不会发生并发问题,这便是Redis的单线程根本模型。

多路I/O复用模型是运用 select、poll、epoll 能够一起督查多个流的 I/O 事情的才能,在闲暇的时分,会把当时线程堵塞掉,当有一个或多个流有 I/O 事情时,就从堵塞态中唤醒,然后程序就会轮询一遍一切的流(epoll 是只轮询那些真实宣布了事情的流),并且顺次次序的处理安排妥当的流,这种做法就防止了很多的无用操作。

这儿“多路”指的是多个网络衔接,“复用”指的是复用同一个线程。选用多路 I/O 复用技能能够让单个线程高效的处理多个客户端的网络IO衔接恳求(尽量削减网络 IO 的时刻耗费)

为什么Redis是单线程?

这儿咱们着重的单线程,指的是网络恳求模块运用一个线程来处理,即一个线程处理一切网络恳求,其他模块仍用了多个线程。

那为什么运用单线程呢?官方答案是:由于CPU不是Redis的瓶颈,Redis的瓶颈最有或许是机器内存或许网络带宽。已然单线程简单完成,并且CPU不会成为瓶颈,那就水到渠成地选用单线程的计划了。

可是,咱们运用单线程的方法是无法发挥多核CPU 功能,不过咱们能够经过在单机开多个Redis 实例来处理这个问题

Redis6.0 的多线程

1、Redis6.0 之前为什么一向不运用多线程?

Redis运用单线程的可维护性高。多线程模型虽然在某些方面体现优异,可是它却引进了程序履行次序的不确认性,带来了并发读写的一系列问题,增加了体系复杂度、一起或许存在线程切换、乃至加锁解锁、死锁形成的功能损耗。

2、Redis6.0 为什么要引进多线程呢?

由于Redis的瓶颈不在内存,而是在网络I/O模块带来CPU的耗时,所以Redis6.0的多线程是用来处理网络I/O这部分,充分运用CPU资源,削减网络I/O堵塞带来的功能损耗。

多线程形式下,是否存在线程并发安全问题?

如图,一次redis恳求,要树立衔接,然后获取操作的指令,然后履行指令,最终将呼应的成果写到socket上。

在redis的多线程形式下,获取、解析指令,以及输出成果着两个进程,能够装备成多线程履行的,由于它毕竟是咱们定位到的首要耗时点,可是指令的履行,也便是内存操作,依然是单线程运转的。所以,Redis 的多线程部分仅仅用来处理网络数据的读写和协议解析,履行指令仍然是单线程次序履行,也就不存在并发安全问题。

面试题专栏

Java面试题专栏已上线,欢迎拜访。

  • 假如你不知道简历怎样写,简历项目不知道怎样包装;
  • 假如简历中有些内容你不知道该不该写上去;
  • 假如有些归纳性问题你不知道怎样答;

那么能够私信我,我会尽我所能协助你。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=551

标签: Redis
分享给朋友:

“Redis终究为什么这么快?” 的相关文章

创建mysql数据库,MySQL数据库创建指南

创建mysql数据库,MySQL数据库创建指南

创建MySQL数据库通常涉及到几个步骤:安装MySQL服务器、配置MySQL服务器、创建数据库、创建用户和授权等。以下是一个基本的指导,帮助您在Windows或Linux系统上创建MySQL数据库。 安装MySQL服务器 Windows:1. 下载MySQL Community Server: 访问...

大数据的处理流程是,大数据处理流程概述

大数据的处理流程是,大数据处理流程概述

大数据的处理流程通常包括以下几个主要步骤:1. 数据收集:从各种来源收集数据,如传感器、日志文件、社交媒体等。2. 数据存储:将收集到的数据存储在适合的大数据存储系统中,如Hadoop分布式文件系统(HDFS)或云存储服务。3. 数据预处理:对数据进行清洗、转换和整合,以便后续的分析和处理。这可能包...

招聘大数据分析师

招聘大数据分析师

1. 猎聘网: 猎聘网提供了大量的大数据分析师职位,包括高薪猎头职位。你可以通过猎聘网了解大数据分析师岗位要求、薪资待遇等详细信息。网站。2. BOSS直聘: BOSS直聘提供2024年最新的数据分析师招聘信息,支持在线直聊和面试,是一个快速找到工作的平台。网站。3. 高校人才网:...

未连接到oracle,原因分析与解决方法

未连接到oracle,原因分析与解决方法

1. ORA12541: TNS无监听程序 原因:表示没有可用的监听器,可能是监听器未启动或配置错误。 解决方案: 确认监听器是否启动:使用命令 `lsnrctl start` 启动监听器。 检查客户端IP地址和端口配置是否正确。 2. ORA12170: 连接超时 原因:在使用TypeO...

mysql题目,MySQL数据库基础题目解析与实战技巧

mysql题目,MySQL数据库基础题目解析与实战技巧

1. 数据库基础:如数据库的创建、表的创建、数据类型等。2. 数据查询:如SELECT语句、条件查询、排序、分组等。3. 数据更新:如INSERT、UPDATE、DELETE语句等。4. 索引:如索引的概念、创建索引、索引的类型等。5. 视图:如视图的概念、创建视图、修改视图等。6. 存储过程和函数...

云计算与大数据的区别,技术融合与独立发展的差异分析

云计算与大数据的区别,技术融合与独立发展的差异分析

云计算和大数据是两个经常被提及的术语,它们在信息技术领域扮演着重要角色,但它们之间存在明显的区别。云计算是一种基于互联网的计算方式,它将计算任务分布在由多台服务器组成的网络中,用户可以按需访问这些资源,包括服务器、存储、数据库、网络、软件、分析、情报等。云计算的主要特点包括:1. 按需自助服务:用户...