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

零基础学习Redis(5) -- redis单线程模型介绍

前面我们提到过,redis是单线程的,这期我们详细介绍一下redis的单线程模型

1. redis单线程模型

redis只使用一个线程处理所有的请求,并不是redis服务器进程内部只有一个线程,其实也存在多个线程,只不过多个线程是在处理网络IO

假设有多个客户端同时操作一个redis服务器:

incr 作用是把key对应的value进行 + 1操作,在多线程中,这样的两个线程对一个变量进行写操作会导致线程安全问题,但是redis并不会,redis只会使用一个线程来指向这个两个命令,也就是这两个命令会串行执行。

因为redis的核心业务逻辑都是平短快的,所以使用单线程也能很好的工作,同时这里也提醒我们慎重使用操作时间长的操作,例如keys *

2. redis为什么快

有的人可能会疑惑,为什么redis使用单线程确还很快(面试题)

注意这里的快是相对于使用硬盘存储的数据库来说

1. redis 访问内存,数据库则是访问硬盘

2. redis 核心功能是要比数据库更简单的,数据库对数据的插入删除查询都有更复杂的功能支持

3. redis每个基本操作对cpu的消耗都不大,单线程也能很好的进行工作

4. redis处理IO的时候使用了IO多路复用机制

3. IO多路复用

IO多路复用就是使用一个线程管理多个连接

例举一个场景:

小明寝室有三个人要出去买午饭,小明想吃蛋炒饭,室友A想吃饺子,室友B想吃炒面,但是这几家店不在同一个位置,现在有几种买饭的方案:

  1. 只派一个人去买,先买蛋炒饭,等蛋炒饭做好了再去买饺子,最后去买炒面(传统的单线程,顺序执行)
  2.  三个人一起去买,各买各的(多线程)
  3. 只派一个人去买,先去买蛋炒饭,这里不等老板做好直接去买饺子,同理,然后去买炒面,哪个先做好先去拿哪个(IO多路复用)

可以看出,传统的单线程效率最慢,而多线程的话开销又太大,所以有了IO多路复用就可以让一个线程,在一个连接阻塞时去处理另一个连接,不过要注意IO多路复用适用于连接和服务器的交互不频繁,大部分时间都在等待的场景,如果交互过于频繁还是使用多线程更合理。

IO多路复用机制是操作系统提供的API实现的,Linux上主要提供了三种API:select,poll,epoll

效率最高的是epoll(事件通知/回调机制) 即连接退出阻塞时操作系统通知线程。

相关文章:

零基础学习Redis(5) -- redis单线程模型介绍

前面我们提到过,redis是单线程的,这期我们详细介绍一下redis的单线程模型 1. redis单线程模型 redis只使用一个线程处理所有的请求,并不是redis服务器进程内部只有一个线程,其实也存在多个线程,只不过多个线程是在处…...

Android Audio

audio概述: Android Audio知识梳理 看完这一篇就够了!-CSDN博客 Android audio篇章(1)------Audio架构_android audio(1)-CSDN博客 android audio google: 音频 | Android Open Source Project (google.cn) 音频…...

远程MySQL数据库:定义、优势及cPanel的数据库工具

在现代网站和应用程序开发中,数据库是必不可少的核心部分。通常情况下,数据库与网站托管在同一台服务器上,但为了提升性能和安全性,越来越多的用户选择使用远程MySQL数据库。那么,什么是远程MySQL数据库呢?…...

【docker】Dockerfile

Dockerfile是用于构建Docker镜像的文本文件,其中包含一组用于定义镜像构建过程的指令。下面是常见的Dockerfile指令及其解释: FROM:指定基础镜像,用于构建新镜像。COPY:将文件或目录从构建上下文复制到镜像中。ADD&am…...

Redis 的 List 结构非常适合用于实现消息队列php

1. Redis List 结构消息队列简介 Redis 的 List 结构非常适合用于实现消息队列。你可以通过 LPUSH 或 RPUSH 命令将消息推入队列,通过 BLPOP 或 BRPOP 命令从队列中弹出消息。BLPOP 和 BRPOP 命令支持阻塞操作,适合在消费者端等待消息的到来。 2. 实现…...

极速闪存启动:SD与SPI模式的智能初始化指南

最近很多客户朋友在询问我们 CS 创世 SD NAND 能不能使用 SPI 接口,两者使用起来有何区别,下面为大家详细解答。 SD MODE: CS 创世 SD NAND 支持 SD 模式和 SPI 模式,SD NAND 默认为 SD 模式,上电后,其初始化过程如下…...

利用多Lora节省大模型部署成本|得物技术

一、背景 近期,我们在大模型集群的部署过程中遇到了一些挑战。公司有多个业务场景,每个场景都基于自身的数据进行微调,训练出相应的大模型并上线。然而,这些场景的调用量并不高,同时大模型的部署成本较为昂贵&#xf…...

使用SSMS连接和查询 SQL Server 实例

简介 SQL Server Management Studio 是用于管理SQL Server基础架构的集成环境。Management Studio提供用于配置、监视和管理SQL Server实例的工具。 此外,它还提供了用于部署、监视和升级数据层组件(如应用程序使用的数据库和数据仓库)的工具以生成查询和脚本。 官方…...

HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十五)

一、不支持for … in 规则:arkts-no-for-in 级别:错误 由于在ArkTS中,对象布局在编译时是确定的、并且不能在运行时被改变,所以不支持使用for … in迭代一个对象的属性。对于数组来说,可以使用常规的for循环。TypeScri…...

两个系统之间跳转免密登录

1、 两个系统之间跳转免密登录_从一个系统跳转到另一个系统,不用再重新登录-CSDN博客 2、 页面跳转统一登录实现_前端从一个系统跳转到其他系统-CSDN博客...

SQL基础——MySQL的触发器、存储引擎、事务

简介:个人学习分享,如有错误,欢迎批评指正。 一、MySQL的触发器 1.概述 介绍 触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段,但是触发器无需调用&…...

目标检测算法:对比YOLOv3、YOLOv5、YOLOv8

目标检测 YOLOv3 数据处理 可输入任意大小的图片(特征图大小最好是32倍数)Anchor:K-Means聚类IOUNMS 模型结构 Backbone Darknet53 无最大池化,步长2卷积层进行下采样每个Conv后 BN LeakyReLU引入残差结构中间层和某一层上…...

C# 属性(Property)

C# 属性(Property) C# 中的属性(Property)是一种用于访问和设置类或结构体成员的值的特殊成员。属性提供了一种封装字段的方式,使得字段的访问更加安全和灵活。本文将详细介绍 C# 属性的概念、用途、语法以及如何使用…...

3. 数据结构——栈的操作实现

1. 顺序栈 主要操作&#xff1a;初始化、栈判空、入栈、出栈、去栈顶元素 1.1 直接数组存储栈 //顺序栈的实现 #include<stdio.h> #define MaxSize 50 typedef int ElemType; typedef struct{ElemType data[MaxSize];int top; //指向栈顶指针&#xff0c;最开始-1 …...

EmguCV学习笔记 VB.Net 4.5 像素距离和连通区域

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…...

使用spring boot开发与直接开发一个web项目的区别

1. 项目结构的区别 springboot开发没有web.xml&#xff0c;配置更加简洁。 2. 启动 传统的web项目将项目打成war包&#xff0c;然后将war包复制到tomcat的webapp目录下&#xff0c;最后通过启动tomcat部署运行项目。 而springboot将项目打成jar包&#xff0c;jar包中包含内置的…...

Leetcode JAVA刷刷站(48)旋转图像

一、题目概述 二、思路方向 要在原地顺时针旋转一个 n x n 的二维矩阵 90 度&#xff0c;你可以通过一系列交换操作来实现。这里的关键在于理解旋转后的矩阵与原矩阵之间的元素对应关系。 假设原矩阵为 matrix&#xff0c;其中 matrix[i][j] 表示第 i 行第 j 列的元素。旋转 90…...

编译型语言和解释型语言

年代区分 从硬件技术和软件需求&#xff0c;计算机发展初期&#xff0c;没有可能发展真正的解释型语言&#xff0c;运行速度和内存都受限&#xff0c;只有给机器喂二进制代码才能勉强跑起来。但事实上&#xff0c;解释型语言却在计算机发展很早的时期曾经出现过&#xff0c;当…...

TensorRT 和 PyTorch区别

一、TensorRT 和 PyTorch TensorRT 和 PyTorch 是两个不同的深度学习工具&#xff0c;虽然它们可以用于处理相同类型的任务&#xff0c;但它们的用途、特点和设计目标有所不同。 TensorRT 简介 TensorRT 是 NVIDIA 开发的一款高性能深度学习推理引擎&#xff0c;主要用于优化…...

iOS 17.6.1版本重发,修复高级数据保护错误

今日&#xff0c;苹果没有带来iOS 17.6.2的更新&#xff0c;而是重新发布了iOS 17.6.1版本&#xff0c;本次升级版本号为21G101&#xff0c;高于第一版的21G93。距离初版发布相隔一周半时间。 在 iOS / iPadOS 17.6.1 的更新日志&#xff0c;苹果公司写道&#xff1a;“此更新包…...

【排序算法】八大排序(上)(c语言实现)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;算法 目录 前言 写一串测试数据 交换两元素的函数 一、冒泡排序 二、选择排序 三、插入排序 四、希尔排序 程序全部代码 总结 前言 排序算法是计算机科…...

Python版《超级玛丽+源码》-Python制作超级玛丽游戏

小时候最喜欢玩的小游戏就是超级玛丽了&#xff0c;有刺激有又技巧&#xff0c;通关真的很难&#xff0c;救下小公主还被抓走了&#xff0c;唉&#xff0c;心累&#xff0c;最后还是硬着头皮继续闯&#xff0c;终于要通关了&#xff0c;之后再玩还是没有那么容易&#xff0c;哈…...

互联网私有IP地址列表

最近因为业务需要&#xff0c;要判断用户的IP是否私有IP&#xff0c; 以前知道的私有IP&#xff0c;基本上只有如下几个(注意&#xff1a;这不是正确答案)&#xff1a; 10.0.0.0/8&#xff08;10.0.0.0-10.255.255.255&#xff09;172.16.0.0/12&#xff08;172.16.0.0-172.31…...

光伏项目管理软件为什么那么多光伏人在用?

在光伏行业迅速发展的今天&#xff0c;光伏项目管理软件已成为众多光伏从业者不可或缺的得力助手。那么&#xff0c;为何这款软件能够受到如此广泛的青睐和应用呢&#xff1f; 一、提高项目管理效率 光伏项目管理软件通过数字化、智能化的手段&#xff0c;对光伏项目的各个环节…...

《AOP实战》— 自定义注解

承接上文&#xff08;传送门 —>《面试必考》 — AOP-CSDN博客&#xff09;&#xff0c;在被面试官拷打的时候&#xff0c;会被问到一个致命问题&#xff1a;“你了解aop吗&#xff1f;有具体的使用经验吗&#xff1f;” 你&#xff1a;......... 言尽于此&#xff0c;此篇…...

微前端架构下的单页应用实现策略

随着Web应用的复杂性日益增加&#xff0c;传统的多页应用&#xff08;MPA&#xff09;模式已经难以满足现代Web开发的需求。单页应用&#xff08;SPA&#xff09;以其流畅的用户体验和高效的页面加载速度&#xff0c;逐渐成为Web开发的主流模式。然而&#xff0c;在微前端架构下…...

JWT(JSON Web Token)工作原理及特点

JWT定义 概念&#xff1a;JWT是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络上安全传输信息&#xff0c;常用于身份验证。比喻&#xff1a;类似于电子通行证&#xff0c;包含用户身份信息&#xff0c;用于身份验证和享受服务。 JWT组成部分 头部&am…...

【体检】程序人生之健康检查,全身体检与预防疫苗,五大传染病普筛,基因检测等

程序员养生指南之 【体检】程序人生之健康检查&#xff0c;全身体检项目分类&#xff0c;五大传染病普筛&#xff0c;基因检测等 文章目录 一、全身体检与预防疫苗&#xff08;年检&#xff09;1、实验室检测&#xff1a;生化全套检查2、医技检查&#xff1a;辅助诊疗科室3、科…...

汇编语言中的指令锁定:解锁高效并发编程

标题&#xff1a;汇编语言中的指令锁定&#xff1a;解锁高效并发编程 在汇编语言的微观世界中&#xff0c;指令锁定&#xff08;Instruction Locking&#xff09;是一种确保数据一致性和操作原子性的关键机制。通过使用特定的lock前缀&#xff0c;开发者可以告诉CPU在执行多处…...

《人工智能时代:金融投资决策的潜在系统性风险及防范策略》

在当今数字化飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;在金融领域的应用日益广泛&#xff0c;特别是在投资决策方面展现出了巨大的潜力。然而&#xff0c;随着其影响力的不断扩大&#xff0c;我们也必须警惕潜在的系统性风险。 人工智能在金融投资决策中…...