当前位置: 首页 > news >正文

Redis作为单线程模型,为什么效率高、速度快呢?

前言:
效率高、速度快是相较于数据库来说的(MySQL、Orcale、SQL server)

文章目录

  • 一、单线程模式的工作流程
  • 二、为什么快?

一、单线程模式的工作流程

这里我们所说的单线程是指:Redis只使用一个线程,来处理所有的命令请求。而并不是说Redis服务器进程内部就真的只有一个进程。Redis内部其实也有多个线程,但那多个线程是在处理 网络IO

在这里插入图片描述
当前这样两个客户端,相当于“并发”的发起了上述请求,但Redis服务器实际上是单线程模型,保证了当前受到的请求是串行执行的。
在这里插入图片描述
那么为什么Redis使用单线程模型,处理业务还是这么快?
这主要取决于Reids的核心业务逻辑,Redis的核心业务逻辑都是短平快,不太消耗CPU资源,也就不太依靠核心数。
弊端
使用Redis必须小心,避免某个操作占用时间长,就会阻塞其他命令的执行。

二、为什么快?

效率高、速度快是相较于数据库来说的(MySQL、Orcale、SQL server)

  1. Redis访问内存,数据库则是访问硬盘。 这两个的速度可能会差上几个数量级。
  2. Redis的核心功能更简单。
    数据库对于数据的插入删除查询,都有更复杂的功能。(例如针对插入删除,数据库中的各种约束,都会使数据库做额外的工作)这样的功能势必会造成更多的开销
    当然消耗多就达标干的活多,这也就是为什么MySQL支持的功能要比Redis多。
  3. Redis是单线程模型,避免了一些不必要的线程竞争开销
    Redis的每个基本操作,都是短平快,只是简单操作一下内存数据,不会产生大的内存CPU开销,即使多个线程,那提升也不大。
  4. 处理网络IO时,使用了epoll这样的IO多路复用机制。
    一个线程可以管理一个socket,针对TCP来说,服务器这每服务一个客户端,就需要为这个客户端安排一个socket。那么一个服务器服务多个客户端,同时就有很多socket。但这些socket并不是无时无刻都在传输数据。大多数socket大多数时间都在静默。
    那么为一个socket分配一个线程,就显得有些浪费了。
    基于上述原因,就出现了IO多路复用–即一个线程管理多个socket

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 虚幻引擎解决构建问题
  • Chainlit集成LlamaIndex实现知识库高级检索(BM25全文检索器)
  • 图像压缩编码(4)--H.26x系列视频压缩编码_2
  • M9410A VXT PXI 矢量收发信机,300/600/1200MHz带宽
  • DPDK 简易应用开发之路 3:实现ping(ARP ICMP 协议)
  • vscode缩进 和自动格式化
  • MySQL表的内外连接
  • sqlserver创建表删除表
  • 库仑定律-库仑力-两个电荷之间静电力的计算公式
  • 计算机网络原理第二章
  • 全栈开发(二):springBoot3连接mysql数据库
  • PHP基础语法讲解
  • R包安装教程,如何安装rjags和infercnv
  • 苍穹外卖——day3
  • 双击热备 Electron网页客户端
  • #Java异常处理
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 2017 年终总结 —— 在路上
  • classpath对获取配置文件的影响
  • ES6核心特性
  • iOS编译提示和导航提示
  • Linux各目录及每个目录的详细介绍
  • mac修复ab及siege安装
  • MySQL的数据类型
  • Netty源码解析1-Buffer
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • php面试题 汇集2
  • Python打包系统简单入门
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • V4L2视频输入框架概述
  • Vue 2.3、2.4 知识点小结
  • 阿里云应用高可用服务公测发布
  • 成为一名优秀的Developer的书单
  • 爬虫模拟登陆 SegmentFault
  • 嵌入式文件系统
  • 让你的分享飞起来——极光推出社会化分享组件
  • 日剧·日综资源集合(建议收藏)
  • 如何编写一个可升级的智能合约
  • 如何进阶一名有竞争力的程序员?
  • 数据仓库的几种建模方法
  • 提醒我喝水chrome插件开发指南
  • ionic异常记录
  • 第二十章:异步和文件I/O.(二十三)
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #APPINVENTOR学习记录
  • #pragma once与条件编译
  • $.ajax,axios,fetch三种ajax请求的区别
  • $GOPATH/go.mod exists but should not goland
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (12)Linux 常见的三种进程状态
  • (C#)一个最简单的链表类