Redis -- 单线程模型

 失败是成功之母  ——法国作家巴尔扎克


目录

单线程模型

Redis为什么这么快


单线程模型

        redis只使用一个线程,处理所有的命令请求,不是说redis服务器进场内部真的就只有一个线程,其实也有多个线程,那就是处理网络和io的线程。

        Redis使用单线程架构来实现高性能的内存数据库服务。

        下图是两个redis-cli客户端对同一个redis服务器进行+1请求:

        在学习java的过程中我们就可以很容易的就知道,这里肯定涉及到一个多线程问题,表面上是自增两次,但是实际上可能只自增了一次。 出现这种问题的原因就是并发。

        幸运的是redis并不会发生这种问题。因为redis是单线程模型,保证了接受多个请求,都是串行的执行,多个请求也是需要在请求队列中进行排队一个一个的执行。

        redis能够使用单线程模型来进行很好的工作,得益于redis的核心业务逻辑都是短平快。不需要消耗很多的cpu资源就可以执行。

redis单线程图解

        但是他也有弊端,那就是如果一个操作时间过长,那么就会影响其他任务的执行。


        说了这么多,既然是单线程,那为什么redis这么?🧐


Redis为什么这么快

        一切的快慢都是有参照物的,那么redis的快的参照物,毫无疑问那就是mysql和SqlServer等关系型数据库。因为redis是直接访问内存,而这些关系型数据库一般都是访问硬盘操作,访问内存的操作肯定比访问硬盘的操作要更加的快速。

        其次,redis要做的业务的核心功能更加简单。Redis既是访问内存,干的事也是很简单。关系型数据库mysql对于插入查询都有着更加复杂的功能支持,这样的功能势必要话费更多的开销。例如各种插入,都有各种约束,都会消耗性能,让数据库变慢。

        Redis干的活很少,提供的功能也是少了不少。🚀

        由于单线程模型,避免了一些不必要的线程竞争开销。

        处理网络IO的时候,使用了epoll这样的IO多路复用一个线程管理多个socket)再加上Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在网络 I/O 上浪费过多的时间。

Redis如何利用多路复用?

         一个线程, 就可以管理多个 socket针对 TCP 来说,服务器这边每次要服务一个客户端,都需要给这个客户端安排一个 socket一个服务器服务多个客户端, 同时就有很多个 socket.
        这些 socket 上都是无事不刻的在传输数据嘛??? 很多情况下,每个客户端和服务器之间的通信也没那么频繁此时这么多 socket 大部分时间都是 静默的上面是没有数据需要传输的。

        同一时刻只有少数的socket是活跃的,如果每一个客户端都生成一个socket,那么线程就多了,系统开销就大了。

        虽然单线程给 Redis 带来很多好处,但还是有一个致命的问题:对于单个命令的执行时间都是有要求的。如果某个命令执行过长,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客户端的阻塞,对于 Redis 这种高性能的服务来说是非常严重的,所以 Redis 是面向快速执行场景的数据库。

        所以我们应该避免keys * 这样的操作。


        你确实挺厉害,如果能从第一篇看到这里的话。不过这些大多数是我自己复习的文章,如果能帮到你是最好的,谢谢。

        下一篇如下:

Redis -- String 字符串, 计数命令,字符串操作-CSDN博客文章浏览阅读480次,点赞18次,收藏13次。Redis 的String字符串,已经一些常用命令:set ,get , mget , mset , setnx , setex, psetex。计数命令incr,decr,incrby,decrby,incrbyfloat。字符串操作:append, getstrang,setstrange,strlen.https://blog.csdn.net/niceffking/article/details/135952746

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有趣的css - 简约的动态关注按钮

页面效果 此效果主要使用 css 伪选择器配合 css content 属性,以及 transition(过渡)属性来实现一个简约的动态按钮效果。 此效果可适用于关注按钮、详情按钮等,增强用户交互体验。 核心代码部分,简要说明了写法思路,看 css 部分的…

中移(苏州)软件技术有限公司面试问题与解答(8)—— coredump与vmcore(2)

Linux 内核调试方法接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(8)—— coredump与vmcore(1) 本文参考以下文章: vmcore分析和实战 内核vmcore文件分析方法 crash工具…

重磅!讯飞星火V3.5正式发布,3大核心能力超GPT-4 Turbo!

1月30日,科大讯飞召开星火认知大模型V3.5升级发布会,这是国内首个基于全国产算力训练的多模态认知大模型。科大讯飞董事长刘庆峰先生、研究院院长刘聪先生出席了大会,并对最新产品进行了多维度解读。 讯飞星火V3.5的7大核心能力实现全面大幅…

数据结构:图文详解 搜索二叉树(搜索二叉树的概念与性质,查找,插入,删除)

目录 搜索二叉树的相关概念和性质 搜索二叉树的查找 搜索二叉树的插入 搜索二叉树的删除 1.删除节点只有右子树,左子树为空 2.删除节点只有左子树,右子树为空 3.删除节点左右子树都不为空 搜索二叉树的完整代码实现 搜索二叉树的相关概念和性质 …

LeetCode: 189.轮转数组

本篇目标了解,翻转数组的经典解法, 189. 轮转数组 - 力扣(LeetCode) 目录 基本方法概述: 1,翻转做法,推荐时O(n),空(1) 2&#x…

喜讯 | 经纬恒润整车电子电气测试实验室通过一汽研发总院外部实验室资质认证!

近日,经纬恒润整车电子电气测试实验室成功通过中国一汽研发总院的资质评定,获得外部实验室认可证书。这是继经纬恒润测试实验室获得一汽智能网联开发院车载以太网测试资质认证之后的又一次认可,它将拓宽经纬恒润与红旗新能源及相关零部件供应…

windows pm2 执行 npm脚本或执行yarn脚本遇到的问题及解决方案

环境: 在windows上启动终端来运行一个项目;通过指令npm run start来启动,但是将终端一关,就无法访问了,所以想到用pm2来管理 1. 全局安装pm2 npm i pm2 -g2. 在项目根目录执行指令(大部分兄弟的错误使用方法) pm2 st…

docker私有库

1.registry私有仓库 拉取registry镜像 docker pull registry 修改docker配置文件并重启 vim /etc/docker/daemon.json {"insecure-registries": ["172.16.23.23:5000"], #添加,注意用逗号结尾"registry-mirrors": ["ht…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好,我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统,在地形上面刷了好多草: 这个时候看一下网格,会发现网格比较多和密集。 …

免费AI写作网站,AI人工智能写作gpt+在线AI绘画midjourney国内版

大家可以通过收藏网页www.woka.chat 直接进行访问,也可通过关注新公众号实现微信端使用~ 注册赠送大量额度,可用于网站全部功能(问答和绘画)!每天签到也可领取充足使用额度! 废话不多说,我们现…

【android】 android->profile 查看内存泄露

目录 实例讲解 各字段解释 实例讲解 各字段解释 在 Android Studio 的 Profile 视图中,Arrange by Stack 用于对内存分配和释放事件进行堆栈排列,以便更好地了解内存使用情况。以下是表上各列的一般含义: 1. **Call Chart (调用图)**: …

Web中的转发与重定向

转发与重定向 一、转发和重定向的概念1.转发2.重定向 二、JavaWeb 中的转发和重定向三、SpringMVC 中的转发和重定向1.转发(1) 默认的方式(2) 完整的方式 2.重定向 四、总结 一、转发和重定向的概念 在 Web 应用中,转发和重定向都是用于将请求从一个页面传递到另一…

MIMIC-IV官方视图解析 - cardiac_marker心脏标记表

今天在学习官方衍生表mimiciv_derived.cardiac_marker心脏标记表时候发现了一些问题: 该表中troponin_t (肌钙蛋白t)的值结果都是空值null 或者 ___ (由于去标识化), 这明显是不合理的 小编查看了该表的官…

提升小波的理解

本文简要介绍一下提升小波的计算过程和基本原理: 1、划分 假设有序列X, 将其奇数索引上的元素构成,Xo将其偶数索引上的元素构成,Xe之所以能文献中都用Xo和Xe划分,是因为 o来源于odd,奇数;e来源于even,偶数;举个例子: 有序列:X=[3,5,22,33,12,34,56,77,99,29] Xo…

乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新

在新一年的起始之际,我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台,自 20 世纪 60 年代起,就引领着电子制造的发展潮流。如今,它已经发展…

服务端渲染

SSR简单来说就是页面上的内容是通过服务端渲染生成的,浏览器直接显示服务端返回的html就可以了。相比之前常用的SPA来说有很多的优点,如下图,但也有一些实际存在的问题,在实际应用中需要多方面权衡利弊。 SSR优势 SSR缺点&#xf…

THREE.JS动态场景开发实战【赛博朋克】

在本教程中,我们将探索如何创建类似 Three.js 的赛博朋克场景,灵感来自 Pipe 网站上的背景动画。 我们将指导你完成使用 Three.js 编码动态场景的过程,包括后处理效果和动态光照,所有这些都不需要任何着色器专业知识。 我用这个场…

【网络】:网络套接字(TCP)

网络套接字(TCP) 一.编写TCP服务器二.编写Tcp客户端三.多进程四.多线程版本五.线程池版完整源代码六.使用示例 一.编写TCP服务器 1.先搭一个架子 2.创建sockfd domain参数依然是AF_INET(因为是IPV4) type方式选择SOCK_STREAM(提供可靠的连接…

优思学院|如何评价质量经理这个角色?

简单来说,公司的成败已经取决于质量的水准。质量是任何公司的重要组成部分,无法保证商品质量的公司将很快失去信誉与消费者的认可,最终导致销售额直线下降。 所以,质量经理的意义首先体现在他们对于质量控制体系的建立和维护上。…

辽宁链家新房数据采集与可视化实现

摘 要 网络爬虫也叫做网络机器人,是一种按照一定的规则,自动地抓取网络信息,进行数据信息的采集与整理的程序或者脚本。随着海量数据的出现,如何快速有效的获取到我们想要的数据成为难题。以房源信息为例,该文使用Pyt…