Redis的入门导读(一)
目录
单机架构
分布式系统
个人总结
一.Redis的介绍
二.Redis特性
三.Redis的快原因
四.Redis的应用场景
五.Redis的总结
由于Redis和分布式系统息息相关,因此我们需要先了解一下,分布式系统!
接下来就是分布式系统的演化过程。
单机架构
在了解什么是分布式系统之前,我们之前使用的都是单机架构。
单机架构:只有一台服务器,负责了所以的工作。

如上图:一个服务器即负责应用服务,也负责数据库服务,如果访问人数不多的情况下,是可以接收处理的。
服务器收到请求需要消耗一些硬件资源,因此,如果成千上万的用户同时请求, 可能会导致某个硬件资源不够用,会导致服务器处理请求的时间变长,甚至于处理出问题。
针对以上的问题,虽然我们可以通过开源节流的方法,但是治标不治本,因此我们可以引入多台主机----分布式系统
注:虽然引入分布式系统可以更好的解决大量请求,但同时复杂程度也是直线上升,出现Bug的概率也会越来越高
分布式系统
分布式系统(Distributed System)是由多个独立计算机(或者是多个硬件节点)通过网络互相通信和协调工作,以达到共同目标的系统。
在分布式系统中,这些计算机被称为节点(nodes)或者处理器(processors),它们可以是物理上分布在不同的地理位置,也可以是逻辑上分布在不同的计算机上。
抛出的砖:

我们将应用服务和数据库服务分开,各置一个服务器,而且我们可以针对不同的需求场景,配建不同的硬件资源!例如,应用服务器,需要的高cpu,对于硬盘空间却没有那么大需求,而数据库服务器却需要更大的硬盘空间。在一个大型系统中,可能有多个应用服务器同时运行,它们协同工作以处理高并发的请求。
引出的玉:

问:在图中,我们发现多了一个负载均衡器,那么有什么作用呢?
答:负载均衡是一种将工作负载分布到多个应用服务器上的技术,以实现系统的高可用性和性能优化。在分布式系统中,负载均衡器是位于客户端和多个应用服务器之间的中介设备或软件组件。
 主要功能包括:
1.请求分发:负载均衡器接收来自客户端的请求,并将这些请求分发到多个应用服务器上,以均衡各服务器的负载。
2.性能优化:通过有效地分配请求,负载均衡器可以提高整体系统的响应速度和处理能力。
3.故障转移:当某个应用服务器发生故障或不可用时,负载均衡器可以自动将流量重定向到其他健康的服务器,从而提高系统的可靠性和稳定性。
4.会话保持:某些负载均衡器可以支持会话保持,确保同一个用户的请求都被发送到同一个应用服务器上,以维持会话状态。
总结:负载均衡器就是领导,应用服务器就是下属,领导分配任务给下属。
进阶的玉:
那么大量的应用服务器去调用存储服务器,请问存储服务器能抗住吗?可不可以和应用服务器一样,也开辟大量的存储服务器呢?不可以啊,你想啊,存储服务器存储的数据,那么数据分开放,应用服务器怎么知道自己需要的数据在哪呢?但是我们可以根据需求将存储服务器分类---- 例如:读和写。

每次写入数据,都会将数据同步到读取的数据当中!同样的道理,也可以开辟出删除数据的存储服务器和更改数据的服务器。
再次进阶的玉:
存在问题:数据库的响应速度是很慢的!
解决方案:二八原则可以解决,在计算机中,有缓存,还有硬盘空间,缓存的数据一般都是我们经常需要使用的,那么数据库是否也可以细分为,经常使用和不经常使用呢?也称冷数据和热数据,当我们需要数据时,先从数据量少的热数据中查找,不存在再去查找冷数据。

缓存服务器中,存放的是频繁被访问的数据(少)。只有主存储服务器的百分之20的数据。
最终版的璞玉:
在之前,我们可以发现存储服务器,我们从一个存储服务器划分为读、写和缓存服务器了,但我们发现,无论如何变化,这只是提高了存储服务器处理数据的速度,但是存储服务器明显是有存储数据量的上限的。那么我们怎么修改存储服务器的上限呢?
解决方法:可以针对数据库,进行分库分表存储,例如将一个数据库的不同表存储在不同的存储服务器中!

如图:我们将数据库当中的表分在不同的存储服务器当中,然后应用服务器根据需求调用相应的存储服务器。
扩展学习:微服务架构
所谓的微服务,就是上面的基础上,再进行功能的划分,将应用服务器划分对应的功能,如下图:

缺点:系统性能下降,更加依赖于网络通信
个人总结
- 单机架构(应用程序+数据库服务器)
- 数据库和应用分离 - 应用程序和数据库 分别在不同的主机部署
 
- 引入负载均衡器,应用服务器->集群 - 通过负载均衡器,把请求比较均匀的分发给集群的每一个应用服务器
 
- 引入读写分离,数据库主从结构 - 一个数据库节点作为主节点,其他N个节点作为从节点,主节点负责写,从节点,负责读
 
- 引入缓存,冷热数据分离 - 进一步提升了服务器针对请求的能力
 
- 引入分库分表,数据库进一步扩展存储空间 - 提高了数据库的存储上限
 
以上就是分布式系统的演化过程
在分布式系统当中,涉及到多个进程,但是进程具有隔离性,更何况,这些进程可能在不同的主机上,又如何跨主机通信呢?
解决方法:Redis就是基于网络,无论是当前主机上的不同进程还是跨主机的进程,我们都可以将内存变量给予其他主机的进程。
一.Redis的介绍

上图:官方的解释,也就是说Redis是 在内存中存储数据
Redis(Remote Dictionary Server)是一个开源的内存数据库系统,属于键值存储(Key-Value Store)类别。它支持多种数据结构,包括字符串(Strings)、哈希表(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等。Redis以其高性能、丰富的数据类型和灵活的应用场景而广受欢迎。
或许有人问:Mysql数据库不能达到该效果吗?
MySQL数据库存在一个很大的问题,访问速度远远慢于Redis,而目前的互联网产品当中,对性能要求是很高的。但同样Redis的存储空间是有限的。那么该怎么解决呢?
典型的方案:MySQL和Redis结合起来,但依然也存在缺点:系统复杂程度大大提升,如果数据发生了改变,还会涉及到很多Redis和MySQL之间的数据同步问题。
二.Redis特性
 这是在Redis官网中,我们可以看见所谓的特性。接下来一一讲解:
 这是在Redis官网中,我们可以看见所谓的特性。接下来一一讲解:
存储数据方面:
之前我们学习的MySQL数据库,是一种关系型数据库,而它的存储方式是通过 ‘ 表 ’ 的方式进行存储组织数据。但是Redis是一种非关系型数据库,存储数据的方式是通过 ‘ 键值对 ’的方式
Redis的操作:
争对Redis的操作,有两种方式;第一种:直接通过简单的交互式命令进行操作。第二种:通过脚本方式,批量执行一些操作。
Redis的扩展:
在官网里,可以在redis基础上进行扩展,Redis提高一组API,扩展方式:C、C++、Rust等语言。
Redis的持久化:
将数据存储在内存上,但是内存容易丢失,因此也会在硬盘备份数据。
Redis的集群:
Redis身为一个分布式系统的中间件,能够支持集群是关键的,官网上描述的是"Horizonta scalability " 中文名:分库分表, 意思是:一个redis能存储的数据是有限的,引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分 。
Redis高可用:
意思:冗余,又或者名为备份,节点拥有主节点的备份。当主节点挂了,从节点就摇身一变为主节点。
三.Redis的快原因
Redis之所以能够如此快速主要归因于以下几个关键因素:
-  内存存储和操作:Redis主要将数据存储在内存中,而不是磁盘。内存的读写速度远高于磁盘,因此Redis能够快速地存取数据。此外,Redis使用了高效的数据结构(如哈希表、链表等),使得数据操作的时间复杂度很低,通常为O(1)或者较低的常数时间复杂度。 
-  单线程模型:Redis采用单线程模型,通过事件驱动机制来处理多个客户端的并发请求。这种设计避免了多线程或多进程之间的竞争和同步开销,简化了系统的设计和实现,并且在一定程度上减少了上下文切换的成本。 
-  非阻塞IO:Redis使用非阻塞IO来处理网络请求和响应,充分利用了操作系统提供的异步IO机制,从而在等待数据读取或写入时不会阻塞整个进程,提高了系统的吞吐量和响应速度。 
-  精简和优化的实现:Redis的代码经过高度优化和精简,遵循了“少即是多”的原则,去除了不必要的复杂性和开销,专注于核心功能的实现和性能优化。 
四.Redis的应用场景

以上是官方推出的应用场景!
第一,把redis当作数据库使用,为降低延迟以及高吞吐量,将数据存储在内存中,并且可以持久化到磁盘,它能够快速读写,适合用来缓存频繁访问的数据,减轻后端数据库的压力,提升整体系统的性能。
第二,会话缓存,将用户会话数据存储在 Redis 中,能够快速存取,并且支持设置过期时间,非常适合用来管理用户登录状态、购物车信息等。
或许有人问,分布式系统,应用服务器那么多,用户每一次访问通过负载均衡都是同一台吗?不会出现差错吗?
答:在典型的负载均衡配置中,用户的每一次访问请求会通过负载均衡器分发到不同的应用服务器上,而不会总是落在同一台应用服务器上。这种分发通常是基于一定的负载均衡算法,如轮询、最小连接数、IP哈希等。
解决方法:
- 会话粘滞(Session Stickiness):这是一种常见的解决方案,它确保同一个用户的所有请求都被发送到同一台服务器上。负载均衡器会根据用户的标识(如IP地址、Cookie中的标识符等)将用户的请求路由到同一台服务器上,从而保持会话的一致性。
- 会话状态共享:另一种方法是确保所有后端服务器可以访问相同的会话状态存储(如数据库、共享缓存或专用的会话存储服务器)。
第三,与MySQL搭配使用,MySQL存储全量数据,而Redis可以存储一些频繁访问的数据,如此,哪怕Redis丢失数据,也依然可以找回。
第四,消息队列,Redis 的列表(List)和发布/订阅(Pub/Sub)功能使其成为一个高效的消息队列中间件。它可以用于异步任务处理、实时消息传递等场景。
相关文章:
 
Redis的入门导读(一)
目录 单机架构 分布式系统 个人总结 一.Redis的介绍 二.Redis特性 三.Redis的快原因 四.Redis的应用场景 五.Redis的总结 由于Redis和分布式系统息息相关,因此我们需要先了解一下,分布式系统! 接下来就是分布式系统的演化过程。 单…...
H5与小程序:两者有何不同?
H5,即HTML5,是构建Web内容的一种语言描述方式,也是互联网的下一代标准,被认为是互联网的核心技术之一。HTML5是在HTML4.01的基础上进行了一定的改进后的规范,用户在使用任何手段进行网页浏览时看到的内容原本都是HTML格…...
 
计算机视觉、目标检测、视频分析的过去和未来:目标检测从入门到精通 ------ YOLOv8 到 多模态大模型处理视觉基础任务
文章大纲 计算机视觉项目的关键步骤计算机视觉项目核心内容概述步骤1: 确定项目目标步骤2:数据收集和数据标注步骤3:数据增强和拆分数据集步骤4:模型训练步骤5:模型评估和模型微调步骤6:模型测试步骤7:模型部署常见问题目标检测入门什么是目标检测目标检测算法的分类一阶…...
 
7月10日学习打卡,环形链表+栈OJ
前言 大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有…...
 
鸿蒙语言基础类库:【@ohos.util.TreeSet (非线性容器TreeSet)】
非线性容器TreeSet 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 T…...
 
freemarker生成pdf,同时pdf插入页脚,以及数据量大时批量处理
最近公司有个需求,就是想根据一个模板生成一个pdf文档,当即我就想到了freemarker这个远古老东西,毕竟freemarker在模板渲染方面还是非常有优势的。 准备依赖: <dependency><groupId>org.springframework.boot</gr…...
 
勇攀新高峰|暴雨信息召开2024年中述职工作会议
7月8日至9日,暴雨信息召开2024年中述职工作会议,总结回顾了上半年的成绩和不足,本次会议采用线上线下的方式举行,公司各部门管理人员、前台市场营销人员参加述职,公司领导班子出席会议。 本次述职采取了现场汇报点评的…...
C++:filter2D函数简要概述
OpenCV中的filter2D函数是一个非常强大的工具,用于对图像进行卷积操作,从而应用各种线性滤波器。这个函数能够处理图像中的每个像素,通过将其与指定的卷积核(或称为滤波器)进行卷积运算,来修改图像的特性。…...
 
Postman使用教程【项目实战】
目录 引言软件下载及安装项目开发流程1. 创建项目2. 创建集合(理解为:功能模块)3. 设置环境变量,4. 创建请求5. 测试脚本6. 响应分析7. 共享与协作 结语 引言 Postman 是一款功能强大的 API 开发工具,它可以帮助开发者测试、开发和调试 API。…...
微软Phi-3:小型而强大的AI模型解析与实战指南
微软Phi-3:小型而强大的AI模型解析与实战指南 引言 随着人工智能技术的飞速发展,小型而高效的AI模型逐渐成为研究与应用的新热点。微软研究院推出的Phi-3系列模型,以其卓越的性能和高效的成本效益,在AI领域引起了广泛关注。本文…...
Python 获取 SQL 指纹和 HASH 值
前言 本文介绍一个提取 SQL 指纹的方法,就是将 SQL 语句的条件转换为 ?可用于脱敏和 SQL 聚类分析的场景。 1. 工具安装 这里用到的工具,就是 pt 工具集中的 pt-fingerprint 含在 Percona Toolkit 中,安装方法可参考 Percona T…...
 
基于OpenCv的快速图片颜色交换,轻松实现图片背景更换
图片颜色更换 图片颜色转换 当我们有2张图片,很喜欢第一张图片的颜色,第2张图片的前景照片,很多时候我们需要PS进行图片的颜色转换,这当然需要我们有强大的PS功底,当然小编这里不是介绍PS的,我们使用代码完全可以代替PS 进行图片的颜色转换 图片颜色转换步骤: 步骤…...
 
在Linux下直接修改磁盘镜像文件的内容
背景 嵌入式Linux系统通常在调试稳定后,会对磁盘(SSD、NVME、SD卡、TF卡)做个镜像,通常是.img后缀的文件,以后组装新设备时,就将镜像文件烧录到新磁盘即可,非常简单。 这种方法有个不便之处&a…...
 
ASP.NET Core----基础学习03----开发者异常页面 MVC工作原理及实现
文章目录 1. 开发者异常页面(1)Startup.cs 页面的基础配置(2)自定义显示报错代码的前后XX行 2. MVC 的原理3. MVC 的实现4.默认路由路径5.返回Json字符串 1. 开发者异常页面 (1)Startup.cs 页面的基础配置 namespace ASP.Net_Blank {public class Startup{private readonly IC…...
 
jvm 07 GC算法,内存池,对象内存分配
01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数,每多一个其他对象引用,计数1, 当引用失效时,计数-1,如果计数0,表示没有其他对象引用,…...
 
ComfyUI入门教程
本文主要介绍了通过源码运行comfyui,默认例子介绍,节点管理器的使用,以及界面汉化。可多参考开源工作流,多加实践,从而掌握comfyui操作。 1.源码运行comfyui 执行命令python main.py如下: 安装numpy 1.x最…...
Flutter TabBar与TabBarView联动及获取当前点击栏目索引
TabBar还有TabBarView都是谷歌flutter官方组件库——Material组件库提供的组件,其中TabBar用于导航切换,TabBarView则是配合其切换显示的对应的视图,官网参考地址:TabBarView class - material library - Dart API。 实现一体联动…...
【区块链+跨境服务】跨境出口电商溯源 | FISCO BCOS应用案例
当前跨境出口电商已成为带动我国外贸发展的中坚力量,尤其疫情特殊时期,成为推动经济增长的一个重要组成 部分。但是跨境出口电商流程长、环节多,且需辗转于不同的服务商以及国家之间,监管与定位也相对困难,容 易出现诸…...
 
记录一次mysql死锁问题的分析排查
记录一次死锁问题的分析排查 现象 底层往kafka推送设备上线数据应用层拉取设备上线消息,应用层有多个消费者并发执行将设备上线数据同步数据库表pa_terminal_channel日志报:(Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: …...
 
【UE5.1 角色练习】16-枪械射击——瞄准
目录 效果 步骤 一、瞄准时拉近摄像机位置 二、瞄准偏移 三、向指定方向射击 四、连发 效果 步骤 一、瞄准时拉近摄像机位置 打开角色蓝图,在事件图表中添加如下节点,当进入射击状态时设置目标臂长度为300,从而拉近视角。 但是这样切…...
 
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
 
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
 
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
 
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
 
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
 
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
 
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

