Redis的入门导读(一)

目录

单机架构

分布式系统 

个人总结

一.Redis的介绍 

二.Redis特性

三.Redis的快原因

四.Redis的应用场景

五.Redis的总结


由于Redis和分布式系统息息相关,因此我们需要先了解一下,分布式系统!

接下来就是分布式系统的演化过程。

单机架构

在了解什么是分布式系统之前,我们之前使用的都是单机架构。

单机架构:只有一台服务器,负责了所以的工作。

如上图:一个服务器即负责应用服务,也负责数据库服务,如果访问人数不多的情况下,是可以接收处理的。

服务器收到请求需要消耗一些硬件资源,因此,如果成千上万的用户同时请求, 可能会导致某个硬件资源不够用,会导致服务器处理请求的时间变长,甚至于处理出问题。

针对以上的问题,虽然我们可以通过开源节流的方法,但是治标不治本,因此我们可以引入多台主机----分布式系统

注:虽然引入分布式系统可以更好的解决大量请求,但同时复杂程度也是直线上升,出现Bug的概率也会越来越高


分布式系统 

分布式系统(Distributed System)是由多个独立计算机(或者是多个硬件节点)通过网络互相通信和协调工作,以达到共同目标的系统。

在分布式系统中,这些计算机被称为节点(nodes)或者处理器(processors),它们可以是物理上分布在不同的地理位置,也可以是逻辑上分布在不同的计算机上。

抛出的砖: 

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


引出的玉: 

问:在图中,我们发现多了一个负载均衡器,那么有什么作用呢?

答:负载均衡是一种将工作负载分布到多个应用服务器上的技术,以实现系统的高可用性和性能优化。在分布式系统中,负载均衡器是位于客户端和多个应用服务器之间的中介设备或软件组件。
主要功能包括:

    1.请求分发:负载均衡器接收来自客户端的请求,并将这些请求分发到多个应用服务器上,以均衡各服务器的负载。

    2.性能优化:通过有效地分配请求,负载均衡器可以提高整体系统的响应速度和处理能力。

    3.故障转移:当某个应用服务器发生故障或不可用时,负载均衡器可以自动将流量重定向到其他健康的服务器,从而提高系统的可靠性和稳定性。

    4.会话保持:某些负载均衡器可以支持会话保持,确保同一个用户的请求都被发送到同一个应用服务器上,以维持会话状态。

总结:负载均衡器就是领导,应用服务器就是下属,领导分配任务给下属。


进阶的玉:

        那么大量的应用服务器去调用存储服务器,请问存储服务器能抗住吗?可不可以和应用服务器一样,也开辟大量的存储服务器呢?不可以啊,你想啊,存储服务器存储的数据,那么数据分开放,应用服务器怎么知道自己需要的数据在哪呢?但是我们可以根据需求将存储服务器分类----   例如:读和写。

每次写入数据,都会将数据同步到读取的数据当中!同样的道理,也可以开辟出删除数据的存储服务器和更改数据的服务器。


 再次进阶的玉:

存在问题:数据库的响应速度是很慢的!

解决方案:二八原则可以解决,在计算机中,有缓存,还有硬盘空间,缓存的数据一般都是我们经常需要使用的,那么数据库是否也可以细分为,经常使用和不经常使用呢?也称冷数据和热数据,当我们需要数据时,先从数据量少的热数据中查找,不存在再去查找冷数据。

缓存服务器中,存放的是频繁被访问的数据(少)。只有主存储服务器的百分之20的数据。


最终版的璞玉:

        在之前,我们可以发现存储服务器,我们从一个存储服务器划分为读、写和缓存服务器了,但我们发现,无论如何变化,这只是提高了存储服务器处理数据的速度,但是存储服务器明显是有存储数据量的上限的。那么我们怎么修改存储服务器的上限呢?

解决方法:可以针对数据库,进行分库分表存储,例如将一个数据库的不同表存储在不同的存储服务器中!

如图:我们将数据库当中的表分在不同的存储服务器当中,然后应用服务器根据需求调用相应的存储服务器。


扩展学习:微服务架构

所谓的微服务,就是上面的基础上,再进行功能的划分,将应用服务器划分对应的功能,如下图:

缺点:系统性能下降,更加依赖于网络通信

个人总结

  1. 单机架构(应用程序+数据库服务器)
  2. 数据库和应用分离
    1. 应用程序和数据库 分别在不同的主机部署
  3. 引入负载均衡器,应用服务器->集群
    1. 通过负载均衡器,把请求比较均匀的分发给集群的每一个应用服务器
  4. 引入读写分离,数据库主从结构
    • 一个数据库节点作为主节点,其他N个节点作为从节点,主节点负责写,从节点,负责读
  5. 引入缓存,冷热数据分离
    • 进一步提升了服务器针对请求的能力
  6. 引入分库分表,数据库进一步扩展存储空间
    • 提高了数据库的存储上限

以上就是分布式系统的演化过程

在分布式系统当中,涉及到多个进程,但是进程具有隔离性,更何况,这些进程可能在不同的主机上,又如何跨主机通信呢?

解决方法: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之所以能够如此快速主要归因于以下几个关键因素:

  1. 内存存储和操作:Redis主要将数据存储在内存中,而不是磁盘。内存的读写速度远高于磁盘,因此Redis能够快速地存取数据。此外,Redis使用了高效的数据结构(如哈希表、链表等),使得数据操作的时间复杂度很低,通常为O(1)或者较低的常数时间复杂度。

  2. 单线程模型:Redis采用单线程模型,通过事件驱动机制来处理多个客户端的并发请求。这种设计避免了多线程或多进程之间的竞争和同步开销,简化了系统的设计和实现,并且在一定程度上减少了上下文切换的成本。

  3. 非阻塞IO:Redis使用非阻塞IO来处理网络请求和响应,充分利用了操作系统提供的异步IO机制,从而在等待数据读取或写入时不会阻塞整个进程,提高了系统的吞吐量和响应速度。

  4. 精简和优化的实现:Redis的代码经过高度优化和精简,遵循了“少即是多”的原则,去除了不必要的复杂性和开销,专注于核心功能的实现和性能优化。

四.Redis的应用场景

以上是官方推出的应用场景! 

第一,把redis当作数据库使用,为降低延迟以及高吞吐量,将数据存储在内存中,并且可以持久化到磁盘,它能够快速读写,适合用来缓存频繁访问的数据,减轻后端数据库的压力,提升整体系统的性能。

第二,会话缓存,将用户会话数据存储在 Redis 中,能够快速存取,并且支持设置过期时间,非常适合用来管理用户登录状态、购物车信息等。

或许有人问,分布式系统,应用服务器那么多,用户每一次访问通过负载均衡都是同一台吗?不会出现差错吗?

答:在典型的负载均衡配置中,用户的每一次访问请求会通过负载均衡器分发到不同的应用服务器上,而不会总是落在同一台应用服务器上。这种分发通常是基于一定的负载均衡算法,如轮询、最小连接数、IP哈希等。

解决方法:

  1. 会话粘滞(Session Stickiness):这是一种常见的解决方案,它确保同一个用户的所有请求都被发送到同一台服务器上。负载均衡器会根据用户的标识(如IP地址、Cookie中的标识符等)将用户的请求路由到同一台服务器上,从而保持会话的一致性。
  2. 会话状态共享:另一种方法是确保所有后端服务器可以访问相同的会话状态存储(如数据库、共享缓存或专用的会话存储服务器)。

第三,与MySQL搭配使用,MySQL存储全量数据,而Redis可以存储一些频繁访问的数据,如此,哪怕Redis丢失数据,也依然可以找回。

第四,消息队列,Redis 的列表(List)和发布/订阅(Pub/Sub)功能使其成为一个高效的消息队列中间件。它可以用于异步任务处理、实时消息传递等场景。

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

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

相关文章

JavaScript(7)——数组

JavaScript中数组的用法与Java差不多&#xff0c;但还是有一些区别 声明数组 语法: let 数组名 [数据1,数据2,数据...] let arr new Array(数据1,数据2,...数据n) 添加数据 数组.push()方法将一个或多个元素添加到数组末尾&#xff0c;并返回该数组新长度 <script>…

机器学习(五) -- 监督学习(7) --SVM1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;6&#xff09; --逻辑回归 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被…

如何写好品牌宣传稿提升品牌曝光?看这篇文章就够了

在这个信息爆炸的时代&#xff0c;一句精炼而富有力量的宣传语&#xff0c;足以让品牌在万千竞争者中脱颖而出。撰写一篇成功的品牌宣传稿&#xff0c;不仅是对文字艺术的驾驭&#xff0c;也是对品牌灵魂的深刻洞察与精准传达&#xff0c;更是连接品牌与消费者情感与认知的桥梁…

蚁剑编码器编写——php木马免杀

蚁剑编码器编写——php木马免杀 我的想法是 木马要先免杀&#xff0c;能够落地&#xff0c;再去考虑流量层面的问题 举几个例子演示一下 命令执行与代码执行是有比较大的区别&#xff0c;蚁剑执行的是php代码&#xff0c;而system&#xff0c;proc_open,passthru,exec,shell_…

Adobe Illustrator 2021 for mac/Win:专业矢量图形设计的巅峰之作

Adobe Illustrator 2021作为Adobe公司旗下的旗舰矢量图形设计软件&#xff0c;无论是对于Mac还是Windows用户&#xff0c;都提供了强大而灵活的设计工具&#xff0c;让设计师们能够轻松应对各种复杂的图形设计挑战。这款软件以其卓越的性能、丰富的功能和友好的用户界面&#x…

后悔没早点考?揭晓六西格玛证书背后的惊人好处

在这个竞争激烈的时代&#xff0c;不断提升自我价值和专业能力是每个职场人士都需要面对的问题。而六西格玛证书&#xff0c;作为一个备受瞩目的职业资格认证&#xff0c;其背后的好处和价值已经远超出了人们的想象。深圳天行健企业管理咨询公司解析如下&#xff1a; 一、提升职…

MySQL Undo Log

总结自bojiangzhou undo log称为撤销日志或回滚日志。在一个事务中进行增删改操作时&#xff0c;都会记录对应的 undo log。在对数据库进行修改前&#xff0c;会先记录对应的 undo log&#xff0c;然后在事务失败或回滚的时候&#xff0c;就可以用这些 undo log 来将数据回滚到…

iPhone数据恢复篇:iPhone 数据恢复软件有哪些

问题&#xff1a;iPhone 15 最好的免费恢复软件是什么&#xff1f;我一直在寻找一个恢复程序来恢复从iPhone中意外删除的照片&#xff0c;联系人和消息&#xff0c;但是我有很多选择。 谷歌一下&#xff0c;你会发现许多付费或免费的iPhone数据恢复工具&#xff0c;声称它们可…

数据结构--二叉树相关性质

1.性质 1.满二叉树每层节点个数&#xff1a;等比数列 3.&#xff08;重要&#xff09;任意二叉树&#xff1a;度为0&#xff08;叶子节点&#xff09;的比度为2的永远多一个。。度&#xff1a;就是看有多少孩子 如下图解析&#xff1a;&#xff08;用推到归纳来分析&#xff…

【测开能力提升-fastapi框架】介绍简单使用

0. 前期说明 立了很多flag(开了很多专题)&#xff0c;但坚持下来的没几个。也干了很多测试工作(起初是硬件(Acoustic方向)测试 - 业务功能测试 - 接口测试 - 平台功能测试 - 数据库测试 - py自动化测试 - 性能测试 - 嵌入式测试 - 到最后的python测试开发)&#xff0c;最终还是…

股票分析系统设计方案大纲与细节

股票分析系统设计方案大纲与细节 一、引言 随着互联网和金融行业的迅猛发展,股票市场已成为重要的投资渠道。投资者在追求财富增值的过程中,对股票市场的分析和预测需求日益增加。因此,设计并实现一套高效、精准的股票分析系统显得尤为重要。本设计方案旨在提出一个基于大…

3d已经做好的模型怎么改单位?---模大狮模型网

在展览3D模型设计行业中&#xff0c;经常会遇到需要将已完成的模型进行单位转换的需求。这可能涉及从一种度量单位转换为另一种&#xff0c;例如从英制单位转换为公制单位&#xff0c;或者根据特定的展览场地要求进行尺寸调整。本文将探讨如何有效地修改已完成的3D模型的单位&a…

VS Code 扩展如何发布到私有Nexus的正确姿势

VS Code扩展的发布 VS Code 扩展的发布需要使用到vsce&#xff0c;vsce是一个用于打包、发布和管理 VS Code 扩展的命令行工具。可以通过 npm 来全局安装它&#xff1a; npm install -g vsce发布扩展到微软的应用市场 VS Code 的应用市场基于微软自己的 Azure DevOps。要发布…

防御---001

一、实验拓扑二、要求 1&#xff0c;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00 - 18:00)可以访问&#xff0c;生产区的的设备全天可以访问. 2&#xff0c;生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMZ…

Linux的tmp目录占用空间100%问题分析和解决

一、背景 系统运行期间&#xff0c;客户突然反馈上传文档传不上去。研发立马排查日志&#xff0c;发现日志中出现大量的“No space avaliable on disk”&#xff0c;下意识应用服务器磁盘满了&#xff0c;赶快连上服务器查看磁盘空间占用情况&#xff1a; 黑人问号脸&#xff…

利用Hbuilder创建vue3的web项目

大体流程如下 npm install vue-router4 下载完&#xff0c;就创建完了

模版初阶(更新)

文章目录 模版介绍函数模版模版匹配规则类模版结言 模版介绍 函数模版分为两个类型&#xff1a; 函数模版类模版 函数模版 语法格式&#xff1a; t e m p l a t e < t y p n a m e T 1 , t y p n a m e T 2... > template<typname T1,typname T2...> template&…

用这款免费爬虫神器,不用手动撸代码了!

很多人学习Python和我说是为了“爬虫”&#xff0c;爬虫的用处确实很丰富&#xff0c;如&#xff1a; 市场研究&#xff0c;了解竞争对手信息&#xff0c;爬虫收集舆论信息、产品动态。 价格分析&#xff0c;通过抓取不同平台商品价格&#xff0c;监测价格波动&#xff0c;…

【Go系列】 Go语言的入门

为什么要学习Go 从今天起&#xff0c;我们将一同启程探索 Go 语言的奥秘。我会用简单明了的方式&#xff0c;逐一讲解 Go 语言的各个知识点&#xff0c;帮助你从基础做起&#xff0c;一步步深化理解。不论你之前是否有过 Go 语言的接触经验&#xff0c;这个系列文章都将助你收获…

比curl更直观的网站性能测试工具httpstat——筑梦之路

GitHub - davecheney/httpstat: Its like curl -v, with colours. wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.pymv httpstat.py /usr/bin/httpstat #移动到环境变量路径chmod x /usr/bin/httpstat #添加可执行权限 exec bash #重置当前bash进…