Redis篇一:初识Redis

文章目录

  • 前言
  • 1. 初始Redis
  • 2. MySQL VS Redis
  • 3. 什么是分布式系统(也是一种处理大量数据时的处理方式)
    • 3.1 单机架构
    • 3.2 数据库与应用服务分离
    • 3.3 负载均衡
    • 3.4 数据库读写分离
    • 3.5 引入缓存(Redis)
    • 3.6 数据库分库分表
    • 3.7 引入微服务
  • 4. 系统概念介绍
    • 4.1 应用(Application)/ 系统(System)
    • 4.2 模块(Module)/ 组件(Component)
    • 4.3 分布式(Distributed)
    • 4.4 集群(Cluster)
    • 4.5 主(Master)/ 从(Slave)
    • 4.6 中间件(Middleware)
    • 4.7 评价指标(Metric)
      • 4.7.1 可用性(Availability)
      • 4.7.2 响应时长(Response Time RT)
      • 4.7.3 吞吐(Throughput)vs 并发(Concurrent)
  • 总结

前言

  The open source,in-memory data store used by millions of developers as a database,cache streaming engine,and message broker.——开源的内存数据存储,被数百万开发人员用作数据库、缓存流引擎和消息中间件。

1. 初始Redis

  Redis是在内存中存储数据的,而我们平时定义的变量就是在内存中的,那么Redis在什么场景下才有用呢?这么想在平时确实没有用,但是其实它是需要在分布式系统中,才会有效果的。如果只是单机程序,直接通过变量存储数据是更好的方式。
  那么说来说去Redis到底是用来干什么的呢?在学习进程部分,我们知道进程是具有隔离性的,彼此之间是无法看到对方的数据的,如果想进行通信,那么就需要双方先看到同一份资源……。
  在进程通信中,有一种方式是通过网络来进行的,我们可以通过网络来实现一个主机的不同进程之间的通信,或者是不同主机之间进程的通信。而Redis就是基于网络,可以把自己内存中的数据给其他进程,甚至是其他主机的进程使用。

2. MySQL VS Redis

  MySQL是目前主流的数据库,但是它有一个很大的问题, 就是它的访问速度很慢,在一些产品中,对于性能要求很高,那么此时MySQL就不太适用了。而Redis也可以当作数据库使用,由于它是在内存中存储的,而MySQL是在硬盘中存储的,所以在效率上Redis是远高于MySQL的。
  自然它也是有缺点的,我们都知道内存相比较硬盘,肯定是小的多的,所以使用Redis作数据库相比较MySQL,存储的数量是比较小的。
  那么有没有方式做到效率又快,存储的数据又多呢?典型的方案就是,将Redis和MySQL进行结合,将Redis作为MySQL的缓存,也就是使用Redis存放热点数据,相当于作为一段缓冲区。但是也有一些其他的代价,比如MySQL和Redis之间的数据同步。

3. 什么是分布式系统(也是一种处理大量数据时的处理方式)

3.1 单机架构

  我们先来看看一个单机架构,就是只有一台服务器,这个服务器负责所有的工作。
  初期,我们需要利用我们精干的技术团队,快速将业务系统投⼊市场进行检验,并且可以迅速响应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。
在这里插入图片描述
  如果用户量和数据量都不高的话,那么一台主机就可以完成高并发和数据存储,而当用户量和数据量越来越高的时候,一台主机不足以支撑的时候,就需要引入更多的主机来分摊压力,这就是我们所说的分布式系统,也就是使用多台主机进行服务。
  但是引入分布式系统,是一种万不得已的决策,一旦引入分布式,那么系统的复杂度就会大大增加,不是双倍,而是指数的程度增加,bug出现的概率也会增加……

3.2 数据库与应用服务分离

  随着系统的上线,我们不出意外地获得了成功。市场上出现了⼀批忠实于我们的用户,使得系统的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的⼀批经验。面对当前的性能压力,我们需要未⾬绸缪去进行系统重构、架构挑战,以提升系统的承载能力。但由于预算仍然很紧张,我们可以选择将应用和数据分离的做法,可以最小代价的提升系统的承载能力。
在这里插入图片描述

3.3 负载均衡

  我们的系统受到了用户的欢迎,并且出现了爆款,单台应用服务器已经无法满足需求了。我们的单机应用服务器首先遇到了瓶颈,摆在我们技术团队面前的有两种方案,大家针对方案的优劣展示了热烈的讨论:

  • 垂直扩展 / 纵向扩展 Scale Up。通过购买性能更优、价格更高的应用服务器来应对更多的流量。这种方案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增长关系是⾮线性的,意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格,其次硬件性能提升是有明显上限的。
  • 水平扩展 / 横向扩展 Scale Out。通过调整软件架构,增加应用层硬件,将用户流量分担到不同的应用层服务器上,来提升系统的承载能力。这种方案的优势在于成本相对较低,并且提升的上限空间也很大。但劣势是带给系统更多的复杂性,需要技术团队有更丰富的经验。

  经过团队的学习、调研和讨论,最终选择了水平扩展的方案,来解决该问题,但这需要引⼊⼀个新的组件⸺负载均衡:为了解决用户流量向哪台应用服务器分发的问题,需要⼀个专门的系统组件做流量分发。实际中负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中。同时流量调度算法也有很多种,这⾥简单介绍几种较为常见的:

  • Round-Robin 轮询算法。即⾮常公平地将请求依次分给不同的应用服务器。
  • Weight-Round-Robin 轮询算法。为不同的服务器(比如性能不同)赋予不同的权重(weight),能者多劳。
  • ⼀致哈希散列算法。通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务。
    在这里插入图片描述

3.4 数据库读写分离

  此时对于应用服务器来说,压力已经减半了(因为有两个服务器),但是对于数据库来说,承担的压力还是很大的。那么此时就可以将数据库的读写进行分离来缓解压力。
在这里插入图片描述
  在实际场景中,读的请求量是高于写的请求量的。而上面又分为主数据库与从数据库,在其中,从数据库是可以有多个的,也就是可以一主多从,当读的访问量过大时,还可以引入负载均衡,将读请求分摊到多个从数据库服务器上。

3.5 引入缓存(Redis)

  数据库有个天然的问题,就是响应速度很慢。此时我们就可以引入缓存,将数据进行 “冷热” 区分,将热点数据放到缓存中——缓存的访问速度是比数据库快很多的。
  随着访问量继续增加,发现业务中⼀些数据的读取频率远大于其他数据的读取频率。我们把这部分数据称为热点数据,与之相对应的是冷数据。针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用memcached作为本地缓存,使用 Redis 作为分布式缓存,还会涉及缓存⼀致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。
在这里插入图片描述

  缓存服务器只是放了一小部分的热点数据——也就是频繁会被访问到的数据。“二八原则”:百分之二十的数据可以支持百分之八十的访问量。(从数据库中依旧是存放了全部的数据)
  此时的缓存服务器就是我们所说的Redis。
  这里就会出现一些情况:如果我们需要更改主数据库中的数据,那么如果同步缓存中的数据呢?如果主数据库修改失败了,缓存修改成功了;或者缓存修改失败了,主数据库修改成功了等等一些场景。

3.6 数据库分库分表

  当数据量足够大的时候,会不会出现一台服务器存不下所有的数据呢?是有可能的,那么此时就需要多台主机来存放数据了。
  随着业务的数据量增大,大量的数据存储在同⼀个库中已经显得有些力不从⼼了,所以可以按照业务,将数据分别存储。比如针对评论数据,可按照商品ID进⾏hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户ID或记录编号来路由数据。只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。其中前面提到的Mycat也支持在大表拆分为小表情况下的访问控制。这种做法显著的增加了数据库运维的难度,对DBA的要求较高。数据库设计到这种结构时,已经可以称为分布式数据库,但是这只是⼀个逻辑的数据库整体,数据库⾥不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由Mycat实现,SQL的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是MPP(大规模并⾏处理)架构的⼀类实现。
在这里插入图片描述
  这是一种分库的手段,如果当一个表特别大时,那么就可以将一个表进行拆分,存放到多个服务器中。

3.7 引入微服务

  随着人员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独立实现自己的微服务,然后互相之间对数据的直接访问进行隔离,可以利用 Gateway、消息总线等技术,实现相互之间的调用关联。甚至可以把一些类似用户管理、安全管理、数据采集等业务提成公共服务。
  简单来说就是将一个业务的不同功能进行分离、拆分,形成更多的、功能更单一、更小的服务器。
  微服务本质上解决的是人的问题,当功能被分离后,那么就只需要少量的人就可以维护一个功能,相比较很多人维护一个完成的业务来讲,将业务分离成小模块进行维护更加方便、高效。
在这里插入图片描述
  代价:系统的性能下降,拆分出来的多个服务,多个功能之间都是要依赖网络通信的,而网络通信是比硬盘还要慢的的,所有性能会下降。

4. 系统概念介绍

4.1 应用(Application)/ 系统(System)

  为了完成⼀整套服务的⼀个程序或者⼀组相互配合的程序群。生活例⼦类比:为了完成⼀项任务,而搭建的由⼀个⼈或者⼀群相互配的⼈组成的团队。

4.2 模块(Module)/ 组件(Component)

  当应用较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。生活例⼦类比:军队中为了进⾏某据点的攻克,将⼈员分为突击小组、爆破小组、掩护小组、通信小组等。

4.3 分布式(Distributed)

  系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例⼦类比:为了更好的满足现实需要,⼀个在同⼀个办公场地的工作小组被分散到多个城市的不同工作场地中进⾏远程配合工作完成⽬标。跨主机之间的模块之间的通信基本要借助网络支撑完成。

4.4 集群(Cluster)

  被部署于多台服务器上的、为了实现特定⽬标的⼀个/组特定的组件,整个整体被称为集群。比如多个 MySQL 工作在不同服务器上,共同提供数据库服务⽬标,可以被称为⼀组数据库集群。生活例⼦类比:为了解决军队攻克防守坚固的大城市的作战⽬标,指挥部将大批炮兵部队集中起来形成⼀个炮兵打击集群。
  分布式 vs 集群。通常不用太严格区分两者的细微概念,细究的话,分布式强调的是物理形态,即工作在不同服务器上并且通过网络通信配合完成任务;而集群更在意逻辑形态,即是否为了完成特定服务⽬标。

4.5 主(Master)/ 从(Slave)

  集群中,通常有⼀个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。比如MySQL 集群中,只有其中⼀台服务器上数据库允许进⾏数据的写⼊(增/删/改),其他数据库的数据修改全部要从这台数据库同步而来,则把那台数据库称为主库,其他数据库称为从库。

4.6 中间件(Middleware)

  ⼀类提供不同应用程序用于相互通信的软件,即处于不同技术、工具和数据库之间的桥梁。生活例⼦类比:⼀家饭店开始时,会每天去市场挑选买菜,但随着饭店业务量变大,成⽴⼀个采购部,由采购部专职于采买业务,称为厨房和菜市场之间的桥梁。

4.7 评价指标(Metric)

4.7.1 可用性(Availability)

  考察单位时间段内,系统可以正常提供服务的概率/期望。例如: 年化系统可用性 = 系统正常提供服务时长 / ⼀年总时长。这⾥暗含着⼀个指标,即如何评价系统提供⽆法是否正常,我们就不深⼊了。平时我们常说的 4 个 9 即系统可以提供 99.99% 的可用性,5 个 9 是 99.999% 的可用性,以此类推。我们平时只是用高可用(High Availability HA)这个⾮量化⽬标简要表达我们系统的追求。

4.7.2 响应时长(Response Time RT)

  指用户完成输⼊到系统给出用户反应的时长。例如点外卖业务的响应时长 = 拿到外卖的时刻 - 完成点单的时刻。通常我们需要衡量的是最长响应时长、平均响应时长和中位数响应时长。这个指标原则上是越小越好,但很多情况下由于实现的限制,需要根据实际情况具体判断.

4.7.3 吞吐(Throughput)vs 并发(Concurrent)

  吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指系统同⼀时刻支持的请求最高量。例如⼀条辆车道高速公路,⼀分钟可以通过 20 辆⻋,则并发是 2,⼀分钟的吞吐量是 20。实践中,并发量往往无法直接获取,很多时候都是用极短的时间段(比如 1 秒)的吞吐量做代替。我们平时用高并发(Hight Concurrnet)这个非量化目标简要表达系统的追求。

总结

  至此,⼀个还算合理的高可用、高并发系统的基本雏形已显。注意,以上所说的架构演变顺序只是针对某个侧面进⾏单独的改进,在实际场景中,可能同⼀时间会有几个问题需要解决,或者可能先达到瓶颈的是另外的方面,这时候就应该按照实际问题实际解决。如在政府类的并发量可能不大,但业务可能很丰富的场景,高并发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决方案。
  对于单次实施并且性能指标明确的系统,架构设计到能够支持系统的性能指标要求就足够了,但要留有扩展架构的接口以便不备之需。对于不断发展的系统,如电商平台,应设计到能满足下⼀阶段用户量和性能指标要求的程度,并根据业务的增长不断的迭代升级架构,以支持更高的并发和更丰富的业务。
  所谓的“大数据”其实是海量数据采集清洗转换、数据存储、数据分析、数据服务等场景解决方案的⼀个统称,在每⼀个场景都包含了多种可选的技术,如数据采集有Flume、Sqoop、Kettle等,数据存储有分布式⽂件系统HDFS、FastDFS,NoSQL数据库HBase、MongoDB等,数据分析有Spark技术栈、机器学习算法等。总的来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,⼀般会提供分布式存储、分布式计算、多维分析、数据仓库、机器学习算法等能力。而服务端架构更多指的是应用组织层面的架构,底层能力往往是由大数据架构来提供

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

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

相关文章

计算机毕业设计选题推荐-OA办公管理系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

白酒与青年文化:潮流与传统的碰撞

在时代的洪流中,青年文化如同一股涌动的潮流,不断冲击着传统的边界。而白酒,作为中国传统文化的瑰宝,也在这一潮流中找到了新的表达方式。今天,我们就来探讨一下白酒与青年文化之间的碰撞与整合,以及豪迈白…

【Vue3】编程式路由导航

【Vue3】编程式路由导航 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…

微服务事务管理

1.分布式事务问题 1.1.本地事务 本地事务,也就是传统的单机事务,在传统数据库事务中,必须要满⾜四个原则: 1.2.分布式事务 分布式事务,就是指不是在单个服务或单个数据库架构下,产⽣的事务,例…

全感知、全覆盖、全智能的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,减少企业级应用约 95%的开发成本,在强大视频算法加…

数学基础(七)

一、熵 熵代表物体内部的混乱程度。(一件事发生的不确定性) 熵应用到分类任务中 二、激活函数 Sigmoid函数: Tanh函数: Relu函数: 三、回归分析 回归分析是寻找存在相关关系的变量间的数学表达式,并进行…

[数据集][目标检测]电力场景输电线异物检测数据集VOC+YOLO格式2060张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2060 标注数量(xml文件个数):2060 标注数量(txt文件个数):2060 标注…

Spring Data JPA 中分页Pageable 的使用说明

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

黑神话悟空什么配置可以玩?什么样的游戏本配置可以畅玩《黑神话:悟空》?黑神话悟空电脑配置推荐

相信不少游戏爱好者,近期被《黑神话:悟空》这款游戏刷屏了,预售开启不到5分钟,所有的产品即宣告售罄,预购3天销售额就破亿,并迅速登顶Steam全球榜。作为一款备受期待的国产3A游戏,以其精美的画面…

致远OA OCR票据识别组件

OCR票据识别 技术支持 技术大佬支持本文档 使用范围 任何票种信息,只要需要对接到oa底表中,就能够实现各种票种,各种字段的对接,包括票据识别,发票核验,适配各种票据 使用介绍 1 配置每种发票的ocr设…

【html+css 绚丽Loading】000016 四维玄方

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

《牛虻》读后感

《牛虻》这本书是同事送的,最近换工作、搬家很多杂事,也就没有多少看书的兴致,所以断断续续看了快两周才看完。这是爱尔兰女作家埃塞尔丽莲伏尼契的代表作,在我国声名远播,是一代人的精神食粮。怀着崇敬的心情翻开这本…

数模小白国赛获奖技巧

一、团队分工合作的技巧(三角形配合) (1)队长要组织多沟通多交流; (2)建议定期开组会,互相讲授自己学习的东西,一人学习,三人收获。 二、AI辅助思路解析&am…

STM32——GPS模块(GY-NEO-6M)

1连接 1-1 使用 USB-TTL 工具,安装好驱动,可以在”设备管理器看到对应COM”按照如下链接测试模块: USB-TTL GPS 模块 3.3V--------------------------------->VCC GND------------------------------>GND RXD--------------------…

如何规避DDoS攻击带来的风险?服务器DDoS防御软件科普

DDoS攻击是目前最常见的网络攻击方式之一。其见效快、成本低的特点,使它深受不法分子的“喜爱”。对于未受保护的企业来说,每次DDoS攻击的平均成本为20万美元,当DDoS攻击汹涌而至,缺失详细的保护预案,企业很可能会陷入…

老师是怎么分班的?用什么工具比较好?

新学期伊始,校园里充满了生机与活力,但对老师们来说,这同样意味着一段忙碌的开始。他们不仅要处理日常的教学准备,还要面临一项看似简单却颇为繁琐的任务——给新生进行分班。分班完成后,老师们还需要将分班结果及时、…

大模型预训练中的数据处理及思考

大模型预训练需要从海量的文本数据中学习到充分的知识存储在其模型参数中。预训练所用的数据可以分为两类。一类是网页数据(web data),这类数据的获取最为方便,各个数据相关的公司比如百度、谷歌等每天都会爬取大量的网页存储起来…

LLaVA 简介

好奇这张照片是在哪里拍摄的?问 LLaVA!(图片来自Pixabay的Guy Rey-Bellet)。 LLaVA(L arge L anguage 和V isual A ssistant 的缩写)是一种很有前途的开源生成式人工智能模型,它复制了 OpenAI …

【数据结构】堆主要的应用场景

1. 堆排序 所谓堆排序,就是在堆的基础上进行排序。 在讲解堆排序之前,让我们先来回顾一下堆的概念, 1.1 大根堆和小根堆 堆是一种完全二叉树,它有两种形式,一种是大根堆,另外一种是小根堆。 大根堆&…

Java共享内容通信 VS Golang通信共享内存

接触的编程语言从C到Java再到现在Go,每个语言都有其独有特性,也具备共通之处。 最近在学习并发编程的时候,发现一个很有意思的点:Java基于共享共享内存通信,而Golang则是通过通信共享内存。为什么?下面我们…