初识Redis · 简单理解Redis

news2025/4/18 22:12:16

目录

前言:

分布式系统

开源节流

认识Redis

负载均衡

缓存

微服务


前言:

本文只是作为Redis的一篇杂谈,简单理解一下Redis为什么要存在,以及它能做到和它不能做到的事儿,简单提及一下它对应的优势有什么,不足有什么之类的。

总之,本文只是Redis入门的杂谈,咱们看看即可~


分布式系统

首先提到Redis,咱们除了能想到它快之外,还应该能想到分布式系统,即便没有系统学习过Redis的同学,对于Redis的第一印象大概率就是它能应用在分布式系统上。

那么什么是分布式系统呢?

我们从最简单的单机架构开始谈。

其实到目前为止,挺多公司用的还是单机架构的服务器,什么是单机架构呢?就是上层的应用服务和数据库服务都是由一个服务器来完成的。那么这个服务器就会面临一个老生常谈的问题,它这个单机服务器面临大的吞吐量的时候怎么办?

所以当数据量大起来的时候,一台单机服务器就没有办法处理这么多的数据量,我们就可以引入其他服务器来帮助原来的单机服务器处理多余的数据量。

那么问题来了,我们是将服务器直接通上电,然后就可以直接运行,甚至可以直接处理数据了吗?显然并不是。

在引入了多台主机的情况下,我们势必面临的问题是不仅有服务器和服务器之间的连接问题,甚至有了人与人之间的资源调度问题。因为多台主机,代码量几乎是按照指数级增加的,所以前期的代码开发,到后期的代码维护,开发人员运维人员的调度明显是一个问题。

我们从最简单的分布式开始入手,最开始一台服务器处理应用服务和数据库存储服务,那么我们思考,是否可以将数据库存储服务和应用服务分开:

就像这样,我们就拥有了两台主机,一台是应用服务器的主机,一台是存储服务器的主机,一个专门用来处理应用的上层请求,一个专门用来处理数据库的服务

到现在,最最基本的分布式架构已经出来了,那么我们把数据量往上增加的过程,势必会有一种烦恼:硬件资源和软件资源如何增加?

开源节流

到了这个时候,面对非常庞大的数据量的时候,硬件资源反而是最好提升的,因为服务器处理请求的时候,吃的资源无非就是CPU,内存,硬盘,网络等资源,所以面对硬件资源,我们可以这样提升:主板上面多插几块CPU,多插几块内存,硬盘等同理,对于网络来说我们可以提升网络带宽,可以更换网卡,从万兆网卡更换成千兆网卡。

到这里,我们就简单理解了开源节流中的开源,即非常简单粗暴的增加硬件资源,无脑堆就行,但是我们仍然面临的问题是,主板中的位置是有限的,也就是说硬件资源是没有办法无线堆积的,那么有人就说了,堆积主板呗,只能说想法是美好的,毕竟硬件资源最耗费的就是钱财了~~

那么开源的时候预算到了一定程度,没有办法了,我们是否应该考虑一下涉及到人工成本的节流?

比如Redis存储热点数据的时候,我们使用的是什么数据结构?这样操作下来时间复杂度是多少?空间复杂度是多少?是否还有更多的空间进行优化?

此时就涉及到了人工的优化了,可是随着服务器规模的增大,代码量增大的可不是一点半点,那么人工成本就非常大了,并且改错了一个bug可能就伴随着n个Bug。

所以其实从这里就可以看到,分布式并不是一件太完美的事,虽然增加了数据量的处理,但是处理的成本是真的大~~

认识Redis

当我们访问Redis的官方网站的时候,我们大概率能搜索到以下的关键字:in-memory data store, cache, streaming engine, message broker

翻译过来就就是存储在内存的数据,缓存,流式引擎,消息队列。

即我们可以理解为Redis可以做的事儿有以上这么多,当然实际上比这些多多了,不过你说Redis能做这么多,是因为它一发明出来就能做这么多事儿吗?

显然不是,最开始Redis的初心只是为了作为消息中间件,即用在消息队列上面,那么这里就涉及了生产消费模型,最开始人们用了一段时间后,发现Redis好像不止可以用在消息队列上,比如应用在流式引擎上好像更香。

所以到这里咱们简单理解呢就是Redis最开始发明出来之后发现应用在其他领域好像也是个香饽饽,也就拿去开发了,不过目前的消息队列呢很少有直接使用Redis作为中间件的,有很多其他著名的中间件,咱们可以上网搜搜~

咱们拿MySQL和Redis来讲,MySQL最大的缺点就是访问慢,数据量一起来,访问速度是会有显著的下降的,而巧了,Redis也可以当作数据库使用,那么我们是不是就可以把MySQL踢出去,直接使用Redis呢?

显然不能,MySQL慢是慢了点,但是人家的存储量比Redis大到哪里去了,那么为什么Redis快呢?因为它是将数据存储到了内存里面

既然是存储到了内存里面,那么按照访问速度金字塔,CPU是最快的,然后是一级缓存二级缓存三级缓存等,最慢的是硬盘,而MySQL读写都是在硬盘,Redis读写都是在内存,你说这速度差的多不多吧!!

而对于Redis来说,还有一个独特的点是它可以进行网络通信,即将自己的内存数据通过网络发送到其他主机上,这就很强了,不过有的时候也会受限于网络等问题。咱们学习进程的时候都知道有一个东西叫做进程的隔离性,而对于Redis来说,它能进行进程间通信,即网络通信,你说它强不强?

好了,我们简单比较了以下MySQL和Redis的区别之后,我们是否会思考,有没有存储量大且速度快的方案?

显然是有的,我们明显可以结合MySQL和Redis使用,比如利用二八原则,即百分之20的数据可以满足百分之80的访问需求。我们就可以把这百分之20的数据放在Redis里面,到时候直接访问redis就可以了,要是访问的不是这20的数据,再访问MySQL就行。

所以根据上文介绍的分布式系统来说,数据量虽然大,但是总有部分数据是经常访问的,我们就把这种数据成为热点数据,其他数据成为冷数据,冷数据咱们就通过MySQL访问,热数据我们大多都是通过Redis访问。

负载均衡

好了,我们现在引入负载均衡的概念了,既然数据量起来了,我们还有多个服务器,那么哪个服务器处理哪个请求呢?最简单的方式是轮询,即A服务器处理了第一个那么就B服务器处理第二个,好了,问题来了,谁来完成这个分配的任务呢?

此时,负载均衡就出现了,负载均衡就像是领导,它不处理请求,它要求的是分发每个请求,即把每个请求根据实际情况分发给不同的服务器,这样就能完成一个削峰填谷的作用。大概率就不能出现某个主机处理的请求太多了导致服务器挂了的情况。

即,负载均衡=领导。

不过既然是领导,既然是要接受所有的请求,虽然不处理,但是仍然是要求负载均衡的接受请求的能力是要大于处理应用服务器的,那么你说会不会数据量大到负载均衡都接受不完的情况?

是非常有可能的,比如双十一,618的时候,就是数据量大爆发的时候,这个时候就可能要引入更多的负载均衡器了。

缓存

可是你别看数据量这么大的时候只有应用服务器在工作,数据多的时候,数据库可是真的烦恼,因为几乎所有的数据都是要从数据库的这里走的,也就是说数据库服务器是一个人默默承担了所有。

那么为了解决问题,根据实际情况出发,我们发现数据库的读频率是远远大于写频率的,所以我们不妨把数据库服务器分为主数据库和从数据库,一个负责读取一个负责写,这样我们引入了两台服务器分别完成读写的操作,自然面临的一个问题就是同步问题

而大多数情况,光把数据库分为了读写数据库还不够,因为有的数据非常频繁的访问,这就导致了有的时候同步不及时,所以引入了缓存:

即我们将数据库分为了三个,其中两个用来读取,一个是普通的从数据库,一个是缓存,用来缓存热点数据,这样数据库的压力一下就下来了。

不过还是那句话,这样后面的维护成本是比较大的,并且同步问题的难度也是越来越大了。此时咱门的Redis就应用到了缓存服务器里面了。不过这里的从数据库存放的可都是全量数据。

微服务

不过如果数据量在极端情况下,非常非常多,多到什么程度呢,多到一张表都需要拆分,此时就需要引入微服务了,即我们将数据量拆分了之后,哪个服务器处理哪个库的哪个表的数据等。

分库分表

这个时候的代码量,以及维护难度是大大的提高了,不过能处理数据的程度也确实提升了不少了。

我们在这里就简单的理解了微服务是什么,即将引入了多台服务器,不过处理的内容比较单一,比如就一个数据库的哪个哪个表。不过具体怎么分,那得看实际情况了。

引入微服务,解决了人的问题,付出的代价?
1.系统的性能下降~~(要想保证性能不下降太多,只能引入更多的机器,更多的硬件资源 =>充钱~~)
拆出来更多的服务,多个功能之间要更依赖网络通信,网络通信的速度很可能是比硬盘还慢的!!!幸运的是,硬件技术的发展,网卡现在有 万兆 网卡,读写速度已经能过超过硬盘读写了~~
2.系统复杂程度提高, 可用性收到影响~~
服务器更多了,出现问题的概率就更大了~~
这就需要一系列的手段,来保证系统的可用性~~
(更丰富的监控报警,以及配套的运维人员)
微服务的优势:
1.解决了人的资源分配问题.
2.使用微服务, 可以更方便于功能的复用
3.可以给不同的服务进行不同的部署

小结:

在分布式系统中,我们接触到的名词有:

应用/系统:即一个服务器程序。
模块/组件:即一个应用中独立的功能
分布式:引入多个服务器,每个服务器协同工作
集群:其实就是分布式上的多个主机,不过集群偏逻辑上
主从结构:比如数据库可以分为主从数据库,服务器节点也是
中间件:和业务无关的功能,比如消息队列,数据库,更多的是为了协助整个服务器工作。
可用性:系统整体可用的时间/总时间
响应时间:肯定是越短越好
吞吐量和并发:一条高速公路,两个车道,并发量为2,一分钟过了100辆车,吞吐量为100.


感谢阅读!

本文主要还是通过分布式系统简单引入Redis~~所以较为粗糙~~后面会越来越详细的!!

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

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

相关文章

自动驾驶时间同步

主要包含两个大的概念:时间系统间的时间同步与传感器数据间的时间同步 1. 时间系统间的时间同步 概念: 自动驾驶域控一般由多个芯片与多种类型的传感器组成,如:MCU SoC Camera Lidar Radar USS GNSS,其中 MCU…

项目进度延误的十大原因及应对方案

项目进度延误主要源于以下十大原因:目标不明确、需求频繁变更、资源配置不足或不合理、沟通不畅、风险管理不足、缺乏有效的项目监控、技术难题未及时解决、团队协作效率低下、决策链过长、外部因素影响。其中,需求频繁变更是导致延误的关键因素之一&…

消息队列(IPC技术)

目录 一、Linux 中主要的进程间通信方式如下: 二、消息队列函数 (1)msgget函数 功能概述 函数原型 参数解释 返回值 示例 结果 问题 (2) msgsnd函数 功能概述 函数原型 参数说明 返回值 示例 结果 (3&#xff0…

突破焊丝虚影干扰,端子焊点缺陷检测如何实现自动化?

端子焊点作为 3C 产品中连接电路的关键环节,其质量优劣对产品性能有着决定性影响。然而,传统人工检测端子焊点不仅效率低下,难以满足大规模生产需求,而且误判率高,无法精准把控产品质量,成为企业提质增效智…

电能质量在线监测分析装置支持实时监测、数据存储及远程传输,适用于电网、工业等场景

电能质量在线监测分析装置主要技术指标 2.1工作电源 交流:220V10% ;50Hz0.5Hz;谐波畸变率不大于15% 直流:220V10%,纹波系数不大于5% 2.2电流信号输入 输入方式:电流互感器输入; …

01分数规划

好久没发博客了……浅浅复活一下,讲个冷门些的算法。 算法目的:选出k组ai,bi使得 最大。 算法过程: 不妨考虑二分答案,那么答案的形式便是 的形式,则可通过移项转化为,进一步的,我们可以将…

网络安全防护技术

边界安全防护——防火墙 控制:在网络连接点上建立一个安全控制点,对进出数据进行限制隔离:将需要保护的网络与不可信任网络进行隔离,隐藏信息并进行安全防护记录:对进出数据进行检查,记录相关信息 防火墙…

课程分享 | 安全设计原则

讲师介绍 前言 在数字化时代,软件安全已从技术问题升级为关乎企业存亡的战略要务。从SolarWinds供应链攻击到Log4j漏洞风暴,一次次安全事件不断警示我们:传统的边界防护思维已无法应对日益复杂的威胁环境。面对不断演进的攻击手段&#xff0…

【数据结构 · 初阶】- 单链表

目录 一.相关指针知识点 二.链表 1.为什么学了顺序表还要学链表 2.优点 三.实现 1.链表的打印 —— 理解链表结构 (2) 物理结构图 2.链表的尾插 —— 入门 错误写法:tail ! NULL 总结: 正确代码物理图解: (2) 尾插整体代码 (思考…

在Linux系统命令行如何使用deepseek官方API调用AI大模型?

在Linux系统命令行如何调用deepseek官方API调用AI大模型? 书接上文: 同样的开头哈哈哈哈: ”在这个AI技术飞速发展的时代,每一个程序员都应该问问自己:如何将人工智能的强大能力融入到我们熟悉的操作系统中&#xff…

我开源了一个“宝藏”开源项目

我开源了一个“宝藏”开源项目 - AI需求分析项目 | 适合交作业和学习 🚀 前言 大家好!最近在学习软件工程和大模型应用开发的过程中,我发现许多学生都遇到了需求分析AI的题目。把一份需求文档转化为用户故事、实体关系或数据库设计&#xff…

SmolDocling:一种超紧凑的视觉语言模型,用于端到端多模态文档转换

paper地址:SmolDocling: An ultra-compact vision-language model for end-to-end multi-modal document conversion Huggingface地址:SmolDocling-256M-preview 代码对应的权重文件:SmolDocling-256M-preview权重文件 一、摘要 以下是文章摘要的总结: SmolDocling 是一…

理解CSS3 的 max/min-content及fit-content等width值

本文首发在我的个人博客: 理解CSS3 的 max/min-content及fit-content等width值https://www.brandhuang.com/article/1744253362074 width/height 的属性值 fit-content 这是一个 CSS3 属性,用来设置元素的宽度和高度,值为 fit-content&#…

关键路径任务延误,如何快速调整

快速识别延误原因、优化资源配置、实施任务并行、调整任务优先级是关键路径任务延误后快速调整的有效方式。其中,快速识别延误原因尤为重要,需要项目管理者及时发现影响关键路径任务延误的核心问题,通过系统性的分析,确保延误的具…

Elasticsearch 全面解析

Elasticsearch 全面解析 前言一、简介核心特性应用场景 二、核心原理与架构设计1. 倒排索引(Inverted Index)2. 分片与副本机制(Sharding & Replication)3. 节点角色与集群管理 三、核心特点1. 灵活的查询语言(Que…

linux入门四:Linux 编译器

一、C 语言编译器 GCC:开启编程之旅 1.1 GCC 安装:一站式工具链 GCC(GNU Compiler Collection)是 Linux 下最常用的 C/C 编译器,支持多种编程语言。安装命令(适用于 Debian/Ubuntu 系统)&…

springboot集成springcloud vault读值示例

接上三篇 Vault---机密信息管理工具安装及常用示例 Vault机密管理工具集群配置示例 vault签发根证书、中间证书、ca证书流程记录 项目里打算把所有密码都放到vault里管理,vault提供了springcloud vault用来在springboot里连接vault,启动加载vault里的值放…

edis 主从复制

Redis 主从复制是一种数据同步机制,主节点(Master)将数据复制到一个或多个从节点(Slave),从 而实现数据备份、读写分离和高可用性。 1、解决我们的日常一个单机故障,而衍生出来 主从架构 2、…

机器视觉+深度学习,让电子零部件表面缺陷检测效率大幅提升

在精密加工的3C电子行业中,一抹0.1毫米的油渍,一粒肉眼难辨的灰尘或将引发整机性能隐患。当制造业迈入微米级品质竞争时代,产品表面看似微不足道的脏污缺陷,正成为制约企业高质量发展的隐形枷锁。分布无规律的污渍斑点、形态各异的…

Java基础关键_035_Lambda 表达式

目 录 一、引例:TreeSet 排序 1.实现 Comparable 接口 2.比较器 3.匿名内部类 4.Lambda 表达式 5.Lambda 表达式和匿名内部类的区别 二、函数式编程 三、Lambda 表达式的使用 1.无返回值函数式接口 (1)无返回值无参数 (…