006、API_单线程

news2024/9/23 19:28:56

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库 服务,本节首先通过多个客户端命令调用的例子说明Redis单线程命令处理 机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理 解单线程模型是使用和运维Redis的关键。

1.引出单线程模型

现在开启了三个redis-cli客户端同时执行命令。
客户端1设置一个字符串键值对:
127.0.0.1:6379> set hello world
客户端2对counter做自增操作:
127.0.0.1:6379> incr counter
客户端3对counter做自增操作:
127.0.0.1:6379> incr counter Redis

客户端与服务端模型都经历 了发送命令、执行命令、返回结果三个过程。其中第2步是重点要讨论的,因为Redis是单线程来处理命令的,所以一 条命令从客户端达到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行。
在这里插入图片描述

所以上面3个客户端命令的执行顺序是不确定的

但是可以确定不会有两条命令被同时执行(如图2-5所示), 所以两条incr命令无论怎么执行最终结果都是2,不会产生并发问题,这就 是Redis单线程的基本模型。
在这里插入图片描述

2.为什么单线程还能这么快

在这里插入图片描述

那么为什么Redis使用单线程模 型会达到每秒万级别的处理能力呢?可以将其归结为三点:
第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时长大 约为100纳秒,这是Redis达到每秒万级别访问的重要基础。
第二,非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上 Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不 在网络I/O上浪费过多的时间,如图2-6所示。

单线程会有一个问题:对于每个命令的执行时间是有要求的。如果 某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务 来说是致命的,所以Redis是面向快速执行场景的数据库。

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

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

相关文章

【Java EE】网络协议——HTTP协议

目录 1.HTTP 1.1HTTP是什么 1.2理解“应用层协议” 1.3理解HTTP协议的工作过程 2.HTTP协议格式 2.1抓包工具的使用 2.2抓包工具的原理 2.3抓包结果 3.协议格式总结 1.HTTP 1.1HTTP是什么 HTTP(全称为“超文本传输协议”)是一种应用非常广泛的应…

IDEA主题Drcula个性化改造

Darcula 主题整体色调看着舒服,但是代码区分不直观,比如直接看代码是看不出这个这个是类、接口、抽象类、枚举还是啥,而且左侧图标也很难区分。 该主题基于Darcula主题对类、接口、抽象类、注解在编辑区按颜色做了区分,同时图标也…

AI遇上遥感,未来会怎样?

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

RT-Thread Env开发探索——以HC-SR04超声波传感器为例

RT-Thread Env开发探索——以HC-SR04超声波传感器为例 0.前言一、BSP优化1.修改芯片功能配置2.修改RTT配置菜单 二、软件包加载1.外设配置2.驱动框架配置3.软件包配置 三、编译及运行四、源码分析五、总结 参考文章:RT Thread Env CLion环境搭建 0.前言 对比使用R…

# 文件或目录损坏且无法读取 的解决方案

文件或目录损坏且无法读取 的解决方案 一、问题描述: windows 系统下,当对某一个文件或文件夹操作时,出现【文件或目录损坏且无法读取】,这时不管对其进行修改、删除、更改属性等操作,都不能正常进行,在 …

Android Notes

maven 版本发布 1、小于 AGP7 使用 maven 插件 apply plugin: maven uploadArchives {repositories {mavenDeployer {pom.groupId GROUP_IDpom.artifactId ARTIFACT_IDpom.version VERSION//正式版本repository(url: RELEASE_URL) {authentication(userName: userName, p…

JS闭包、原型链简单理解

目录 1.闭包概念 1.1简单demo1: 1.2简单demo2 1.3使用let代替var解决这个问题 2.函数对象和原型链 ​编辑 2.1函数对象demo 2.2.原型链demo 3.使用闭包完成JQuery的一个小demo 1.闭包概念 1.当函数声明时,函数会通过内部属性[scope]来创建范围 2.闭包一个…

出书,是「盖你自己的房子」你知道吗?

出书是「盖你自己的房子」 尊敬的出书盟友: 你好!我希望这封信能够激发您对出书和阅读的热情。 在当今信息爆炸的时代,每个人都有机会分享自己的故事、思想和知识。而书籍作为一种流传百年的媒体,依旧承载着无限的力量和影响力…

HE TB PPDU MU-RTS

看起来像是MU-RTS的触发帧的应答不是HE TB PPDU,而是传统得的帧,应答CTS。 非AP 的STA,是不能发送触发帧,也就是说,触发帧,只能是由AP发送给STA

【CCF-CSP】 202309-3 梯度求解

思路: 将表达式整理成只有目标求导变量的无括号加法表达式,其他变量均代入其值,然后利用最简单的求导公式,求出最终值。 样例1 x1 x1 x1 * x2 *转换成 x1*x1*x1x1*x2 若求导x1,则只留下x1,变为 x1*x1*x1…

python:__set_name__使用

python:__set_name__使用 1 前言 在Python中,我们可以通过__set_name__方法来实现一些特殊的操作。该方法是在定义类的时候被调用,用于设置属性的名称。这样一来,我们就可以在类定义中动态地获取属性的名称,从而更好…

转行一年了

关注、星标公众号,直达精彩内容 ID:技术让梦想更伟大 整理:李肖遥 来公司一年了。 说是转行其实还是在半导体行业,熟悉我的朋友知道 ,我在18年开始进入半导体行业,那个时候想着行业很重要,站对了…

LearnOpenGL(二十)之立方体贴图

一、创建立方体贴图 首先,生成一个纹理,并将其绑定到纹理目标GL_TEXTURE_CUBE_MAP: unsigned int textureID; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); 因为立方体贴图包含有6个纹理&#xff0…

Go微服务: Http服务注册在Consul的示例(非Go-Micro)

概述 现在,我们使用consul客户端的api来把Http服务注册到consul上,非Go-Micro的形式其实,consul官方提供了对应的接口调用来实现,golang中的consul/api包对其进行了封装我们使用consul/api来进行展示 目录结构 gitee.com/go-mi…

Day39贪心算法part06

LC738单调递增的数字(未掌握) 思路分析:一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9字符串是不可变的,不可以使用s.char…

图像处理案例01

案例01 例011.1 目标1.2 步骤1.3 代码 例01 1.1 目标 找出图形中的圆弧。 1.2 步骤 读入图像。彩色图转灰度图。图像处理。读灰度图阈值分割,得到img_thre,除掉图中的蓝色和绿色,只留下白色。对img_thre做水平梯度得到gx,这样…

ESP32-C3模组上跑通OTA升级(9)

接前一篇文章:ESP32-C3模组上跑通OTA升级(8) 本文内容参考: 《ESP32-C3 物联网工程开发实战》 乐鑫科技 特此致谢! 七、固件版本 将不同功能的固件标记为不同版本是方便后期维护的一个重要手段。ESP-IDF提供了一些标…

飞机大战游戏实现揭秘

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、游戏概览与核心玩法 二、游戏模块详解 1. 游戏主循环模块 2. 创建初始化模块 三、关…