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官网中,我们可以看见所谓的特性。接下来一一讲解:
存储数据方面:
之前我们学习的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,从而拉近视角。 但是这样切…...
04OLED简介和调试方法
OLED简介和调试方法 调试方式串口调试显示屏调试其他调试方法总结: OLED简介硬件电路OLED驱动函数 keil调试模式进入方法keil调试界面窗口简单功能说明更加强大的功能 调试方式 电脑想看什么变量可以直接打印到屏幕,但是单片机很多时候由于成本和电路结构…...
“LNMP环境搭建实战指南:从零开始配置CentOS 7下的Nginx、MySQL与PHP“
目录 1.前言 2.准备工作 2.1.环境信息 2.2.关闭SELinux和firewalld 3.安装Nginx 3.1.运行以下命令,安装Nginx 3.2.运行以下命令,查看Nginx版本 4.安装MySQL 4.1.更新秘钥 4.2.配置MySQL的YUM仓库 4.3.安装MySQL 4.4.查看MySQL版本 4.5.启动…...
院内导航:如何用科技破解就医找路难题
自2019年开始“院内导航”被纳入医院智慧服务评估体系以来,到2023年改善就医服务升级的部署,每一步都见证了我国医疗卫生体系向智能化、人性化迈进的坚实步伐。 面对庞大复杂的医院环境与日益增长的就诊需求,如何让患者在茫茫人海中迅速找到就…...
C++基础篇(1)
目录 前言 1.第一个C程序 2.命名空间 2.1概念理解 2.2namespace 的价值 2.3 namespace的定义 3.命名空间的使用 4.C的输入输出 结束语 前言 本节我们将正式进入C基础的学习,话不多说,直接上货!!! 1.第一个C程…...
云视频监控中的高效视频转码策略:视频汇聚EasyCVR平台H.265自动转码H.264能力解析
随着科技的快速发展,视频监控技术已经广泛应用于各个领域,如公共安全、商业管理、教育医疗等。与此同时,视频转码技术作为视频处理的关键环节,也在不断提高视频的质量和传输效率。 一、视频监控技术的演进 视频监控技术的发展历…...
xcode配置swift使用自定义主题颜色或者使用RGB或者HEX颜色
要想在xcode中使用自定义颜色或者配置主题色,需要在Assets中配置,打开Assets文件,然后点击添加Color Set: 输入颜色的名称,然后选中这个颜色,会出现两个颜色: Any Appearance表示亮色模式下使用…...
相同含义但不同类型字段作为join条件时注意事项
假设表A和表B中都有表示学号的stu_id字段,但该字段在表A和表B中类型分别为bigint和string。当直接通过该字段进行join时,一般情况下可以得到我们预期的结果。 select a.stu_id from a as r join b as l on r.stu_id l.stu_id 但是如果学号长度较长的…...
数据结构(3.8)——栈的应用
栈在括号匹配中的应用 流程图 代码 #include <stdio.h> #include <stdlib.h> #define MaxSize 10typedef struct {char data[MaxSize];int top; } SqStack;// 初始化栈 void InitStack(SqStack* S) {S->top -1; // 初始化栈顶指针 }// 判空 bool StackEmpty(…...
前端面试题35(在iOS和Android平台上,实现WebSocket协议有哪些常见的库或框架?)
在iOS和Android平台上,实现WebSocket协议有许多成熟且被广泛使用的库和框架。下面是一些推荐的选项: iOS 平台 SocketRocket 简介:这是由Facebook开源的库,专门为iOS和Mac OS X设计,提供WebSocket连接的功能。它基于S…...
Mysql如何高效ALTER TABL
ALTER TABLE 缺点 MySQL 的ALTER TABLE 操作的性能对大表来说是个大问题。 MySQL MySQL 执行大部分修改表结构操作的方法是用新结构的 创建一个,空表从旧表中查出所有数据插入,新表然后删除旧。表这样操作可能需要花费很长,时间 如内果存不…...
泉州有哪些公司是做网站/重庆森林经典台词截图
2019年全国硕士研究生入学考试湖北师范大学自命题考试科目考试大纲(科目名称:计算机应用技术 科目代码:914)一、 考查目标本科目主要考查考生对当今信息技术的掌握程度,全面考查考生在各专业岗位的计算机应用能力,重点考查考生计算思维能力、…...
动态网站编程基础/b站推广链接
1.JS函数的学习(方法)函数也是对象1.1函数有3种声明方法函数声明的三种形式(1) function 函数名(){函数体}(2) var 函数名function(){函数体}(3)var 函数名new Function("函数体");1.2输出方式3种的归纳alert(a);//1.弹窗式输出document.write("HELL…...
企业怎么样上各大网站做宣传/什么是论坛推广
查看SELinux状态: 1、##如果 SELinux status 参数为enabled即为开启状态 /usr/sbin/sestatus -v 2、也可以用这个命令检查 getenforce 关闭SELinux: 1、临时关闭(不用重启机器): setenforce 0 …...
专业的网站制作中心/百度推广登陆网址
1 数据封装 所有数据对象如image或surface都包含在DataNode中,这些DataNode描述数据本身(mitk::BaseData及其派生类),如: - 以二维或三维的渲染方式呈现(一个mitk::Mapper列表);- 与…...
网站建设的关键点/seo免费入门教程
产品合格证标签是产品生产出售过程中的一个重要的标牌,产品合格证的外观有很多种,方形合格证,圆形合格证,三角形合格证,那么这些各种各样的合格证标签是怎么制作出来的呢?下面以三角形合格证为例子教大家如…...
乌镇网站建设投标书/百度推广如何计费
什么是Dynamic Island Dynamic Island 是一项功能,可调整 iPhone 14 Pro 和 iPhone 14 Pro Max 上药丸形凹口的大小。调整大小让黑色区域包含更多信息、交互式信息,您可以点击或长按以访问不同的功能。 脚步 我们需要创建一个带有 Widget Extension 的项目。你可以参考之前的…...