【Redis】redis的单线程模型为什么快?

ops/2024/12/14 22:23:14/

Redis的单线程模型

  对于redis来说,它最大的特点无非就是快,而我们又知道,redis是单线程模型,那么它为什么会快呢?
  • 首先我们说它快,肯定是有参照物的,这里一般是拿关系型数据库来进行对比,就比如MySQL
  • redis它的数据都是放在内存上的,mysql是放在硬盘上,从这一点来看,内存上访问数据肯定是比硬盘上访问数据要快的多
  • redis它的网络IO处理是使用异步io的多线程epoll模型,而且它还将各种命令的处理当成一个个的事件,这就保证了它的io速度是很快的,但这里就会有疑问, redis不是单线程模型吗?这里我想告诉的是redis的单线程模型指的是它的命令处理是单线程的,也就是串行化的,并不是说redis的整个服务器都是单线程。
  • redis是单线程,这就保证了它不会有线程安全的问题,更不会有线程竞争,以及线程切换的资源消耗。

redis的单线程模型,它处理命令是串行化的,我们就想象好比redis就是一个食堂的窗口,而这个食堂只会有一个窗口, 当学生要吃饭的时候就会来窗口排队,就好比redis的命令到来了, 需要服务器去处理这些命令,那么这些命令就会排队等待处理。

所以由于redis的这种单线程模型,注定了它绝对不能允许有那种需要很长时间去处理的命令出现,因为这就导致后面的命令都得不到处理,那么redis就会阻塞住。


http://www.ppmy.cn/ops/141924.html

相关文章

springboot集成h2数据库并使用多数据源

前言 为了满足客户的需求,我们计划将项目中使用的MySQL数据库迁移至H2数据库。虽然项目已经集成了多数据源,理论上可以正常运作,但在实际操作过程中,我们发现项目启动时无法自动创建表。我们将对此问题进行深入分析,并…

Jenkins参数化构建详解(This project is parameterized)

本文详细介绍了Jenkins中不同类型的参数化构建方法,包括字符串、选项、多行文本、布尔值和git分支参数的配置,以及如何使用ActiveChoiceParameter实现动态获取参数选项。通过示例展示了传统方法和声明式pipeline的语法 文章目录 1. Jenkins的参数化构建1…

SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!

一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 正常情况下我们在开发系统的时候都是使用一个数据源,但是由于有些项目同步数据的时候不想造成数据库io消耗压力过大,便会一个项目对应多个数据源…

CentOS7 安装Selenium(使用webdriver_manager自动安装ChromeDriver)

在 CentOS 7 上安装 Selenium 通常涉及几个步骤,包括安装 Python、安装 Selenium 库、安装 WebDriver 以及配置环境。以下是详细的步骤: 1. 安装 Python 和 pip 如果你的系统中还没有安装 Python 和 pip,可以使用以下命令进行安装&#xff…

Git-基础操作命令

目录 Git基础操作命令 case *查看提交日志 log 版本回退 get add . Git基础操作命令 我们创建并且初始化这个仓库以后,我们就要在里面进行操作。 Git 对于文件的增删改查存在几个状态,这些修改状态会随着我们执行Git的命令而发生变化。 untracked、…

stm32 hal使用sysTick定时器非阻塞延时方法

简介 一种在stm32 hal库中实现非阻塞任务处理扫描的方式。 stm32f1xx_it.c /* USER CODE BEGIN 0 */ uint8_t Time_1ms 0; uint8_t Time_10ms 0;/* USER CODE END 0 *//*** brief This function handles System tick timer.*/ void SysTick_Handler(void) {/* USER CODE B…

Java面试八股文(2025最新整理)

Java的特点 Java是一门面向对象的编程语言。面向对象和面向过程的区别参考下一个问题。 Java具有平台独立性和移植性。 Java有一句口号:Write once, run anywhere,一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编…

JavaScript 原型对象与原型链的魔法与艺术

在JavaScript的世界里,原型对象和原型链是两个非常重要的概念。它们不仅帮助我们理解对象的创建过程,还为我们提供了一种高效的方式来管理共享的属性和方法。本文将深入探讨JavaScript中的原型对象和原型链,包括它们的定义、工作原理以及在实…