【redis】认识redis和分布式系统

文章目录

  • 认识 redis
    • redis 的主要功能
    • 实现数据库
    • 实现缓存
    • 实现消息中间件
  • 基础概念
    • 评价指标
  • 分布式系统
    • 单机架构
    • 为什么数据多了主机就难以应对 ?
    • 分布式系统

认识 redis

redis 的主要功能

用来在内存中存储数据


定义变量不就是在内存中存储数据吗?为什么还需要 redis 来向内存中存储数据?这不是绕了一个圈嘛?

  • redis 是在分布式系统中才能发挥威力
  • 如果只是单机程序,直接通过变量存储数据的方式,是比使用 redis 更优的选择

由于我们现在很多的系统都是分布式的系统,在分布式系统中,若想让多个服务器都共享同一份数据,又想这个数据存在于内存中,此时使用 redis 就是一个可选的选择了


对于存储数据来说,直接存在变量中,往往是更快速、更方便的选择,但是若放在分布式系统中,直接定义变量就不行了

  • 因为你定义的变量是在你当前服务器进程中的一块空间
  • 进程具有隔离性,每个进程之间都是被隔离开的,进程 A 无法读取进程 B 中的数据
  • 如果是在分布式系统下,肯定会涉及到多个进程,甚至是在不同的主机上的多个进程,此时你想直接访问其他内存中的变量,这件事就变得困难起来了
    redis 就是针对上述的功能点进行了封装,既然没法突破进程的隔离性直接进行访问,那就使用“进程间通信“,网络 就是其最主流方案

网络既可以让同一个主机间的进程进行通信,而且还可以让不同主机之间的进程进行通信,因此,redis 就相当于是基于网络,能够把自己内存中的的变量给别的进程、甚至别的主机的进程进行使用

实现数据库

redis 还被一些人当做数据库来使用

常见的 MySQL 最大的问题在于:访问的速度比较慢
在很多互联网产品中,对性能要求是很高的,“”有时候就是一个很大的问题

redis 被当做数据库来使用的优点就在于:快,快很多

  • 核心在于它是用内存存储数据的,而 MySQL 的数据是在硬盘上的
  • 计算机访问内存的速度比访问硬盘的速度快几千上万倍 image.png|491

redisMySQL 相比,最大的劣势是:存储空间是有限的

  • 虽然有不少的互联网产品,对性能要求是很高的,就需要访问速度很快
  • 但更多的互联网产品对于性能的要求没那么高,同时又希望用更低的成本存更多的数据,显然 MySQL 是更好的选择,同时 MySQL 相比于 redis 来说,提供了更丰富的功能

实现缓存

那有没有存储空间又大,访问速度又快的方案呢?

  • 典型的方案就是把 redisMySQL 结合起来
  • 把热点数据(经常访问的数据)就用 redis 来存储,把全量数据就用 MySQL 来存储
  • “二八原则”,20% 的热点数据能满足 80% 的访问需求

这就是缓存的机制,不过这样系统的复杂程度就会大大提高。而且,如果数据发生修改,还会涉及到 redisMySQL 之间的数据同步问题

实现消息中间件

redis 的初心,就是作为一个“消息中间件”(消息队列),实现分布式系统下的生产者消费者模型
但当前很少会直接使用 redis 作为消息中间件,因为业界中有更多更专业的消息中间件可以使用

基础概念

  • 应用Application)/系统System
    一个应用,就是一个/组服务器程序

  • 模块Module)/组件Component
    一个应用,里面有很多的功能,每个独立的功能,就可以称为是一个模块/组件

  • 分布式Distributed
    引入多个主机/服务器,协同配合完成一系列的工作(物理上的多个主机)

  • 集群Cluster
    通过多个服务器/主机,去协同配合完成一系列的工作(逻辑上的多个主机,一个服务器上部署多个服务器程序,这些服务器程序之间也是通过网络进行通信,看上去也是和多个主机没什么区别,但在硬件上还是一个主机)

  • Master)/Slave
    分布式系统中,一种比较典型的结构。比如现在有多个服务器节点,其中一个是主,另外的是从。这个时候从节点就是主节点的跟班(从节点的数据要从主节点同步过去),

  • 中间件Middleware
    一组和业务无关的服务(功能更通用的服务,数据库、缓存、消息队列…)

评价指标

  • 可用性Availability
    系统整体可用的时间÷总的时间(这个结果越高越好)
    一个系统的第一要务

  • 响应时长Response Time RT
    衡量服务器的性能,越小越好,和具体服务器要做的业务密切相关

  • 吞吐Throughput)vs 并发Concurrent
    衡量系统的处理请求的能力,是衡量性能的一种方式

分布式系统

千万不要把所谓的“分布式”想的太复杂,太高大上…

单机架构

image.png|591
此处假定是一个“电商网站”,用户通过网络访问这个服务器,其分为两个部分:

  1. 应用服务:我们写的服务器程序

    • 就是说用户打开这个网站,页面上要能显示商品信息,点进去能看到详情,能下单… 这些预计的功能就是通过这个“应用服务器/HTTP服务器这样的程序”来支撑的
    • C++ 里面的 cpp-hyyplib
    • Java 里面的 Spring
    • 这俩都是用来写 HTTP 服务器的
  2. 数据库服务:

    • 用来存储这个网站中大量的数据
    • 可以使用 MySQL
      • MySQL 是一个“客户端-服务器“结构的程序,本体是 MySQL 服务器(存储和组织数据的部分)
      • 上面的 HTTP 应用服务服务器作为客户端,去读写数据库服务
  • 当用户现在查看商品列表,那么应用服务器(HTTP 服务器) 就会发送请求给 MySQL 服务器,然后 MySQL 查找数据之后将数据返回给应用程序,最后应用程序通过 HTTP 协议,最终将信息返回给用户

绝大部分的公司的产品都是这种单机架构。因为现在的计算机硬件发展速度是非常快的,这就意味着哪怕我们只有一台主机,这一台主机的性能也是非常高的,可以支持非常高的并发,非常大的数据存储

如果业务进一步增长,用户量和数据量都水涨船高,当一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源,就需要使用分布式系统了

为什么数据多了主机就难以应对 ?

一台主机的硬件资源是有上限的,包括但不限于一下几种:

  • CPU
  • 内存
  • 硬盘
  • 网络

  • 服务器每次收到一个请求,都是需要消耗上述的一些资源的~~
    如果同一时刻处理的请求多了,此时就可能会导致某个硬件资源不够用了,无论是那个方面不够用了,都可能会导致服务器处理请求的时间变长,甚至于处理出错

如果我们真的遇到了这样的服务器不够用的场景,我们可以:

  1. 开源
  • 简单粗暴,直接增加更多的硬件资源(什么不够补什么)
  • 不过一个主机上面能增加的硬件资源也是有限的,取决于主板的扩展能力
  1. 节流(软件上优化)
  • 针对程序进行优化,优化代码(各凭本事)
  • 通过性能测试,找到是哪个环节出现了瓶颈,再对症下药
  • 操作起来很难!对程序员的水平要求比较高

分布式系统

当一台主机扩展到极限了,但是还不够,就只能引入多台主机了

但不是说买来的新的机器直接就可以解决问题,也需要软件上做出对应的调整和适配。当引入多台主机了,我们的系统就可以称为“分布式系统”了

引入分布式系统万不得已的,系统的复杂程度会大大大提高(指数增长),这样出现 bug 的概率就越高、加班的概率就越大、丢失年终奖的概率也随之提高

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

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

相关文章

Python计算机视觉 第7章-图像搜索

Python计算机视觉 第7章-图像搜索 7.1 基于内容的图像检索 在大型图像数据库上,CBIR(Content-Based Image Retrieval,基于内容的图像检索)技术用于检索在视觉上具相似性的图像。这样返回的图像可以是颜色相似、纹理相似、图像中…

halcon try_catch无try不项目

#1,没有用过try的人,肯定是没有真正实战做过项目的。 #2,try_catch又被称为抓异常语句,出现异常的代码会在 exception里进行显示,这个exception就是一个字符串的数组。 #3,为什么要用,halcon的一…

OpenCV结构分析与形状描述符(13)拟合椭圆函数fitEllipseDirect()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆拟合一组2D点。它返回一个内切于该椭圆的旋转矩形。使用了由[91]提出的直接…

将字符串序列中的每个字符串,用字符“0“扩充到x位 Series.str.zfill(x)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 将字符串序列中的每个字符串sn 如果sn的位数不足x位 则在sn左侧补充0凑齐x位 即在sn左侧补充x-sn个0 Series.str.zfill(x) 选择题 关于以下代码输出结果的说法中正确的是? import pandas …

在国产芯片上实现YOLOv5/v8图像AI识别-【4.4】RK3588网络摄像头推理后推流到RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 前言…

基于微信小程序点餐、外卖系统的设计与实现 (源码+lw+参考文档+核心代码讲解等)

基于微信小程序点餐、外卖系统的设计与实现(源码lw部署文档讲解等) 项目概述: 这段时间做了一个关于点餐的小程序,也是学习和总结的一部分,希望对大家有所帮助。本课题的主要目标是设计并能够实现一个基于微信小程序点餐系统。项目采用的是…

transforemr网络理解

1.transformer网络中数据的流动过程: 2.transformer中残差的理解: 残差连接(Residual Connection) 的核心思想就是通过将输入与经过变化的输出相加,来最大限度地保留原始信息。 transforemr中注意力层网络和前馈神经…

GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用

以地下水数值模拟软件GMS操作为主要授课内容,在教学中强调模块化教学,分为前期数据收集与处理;三维地质结构建模;地下水流动模型构建;地下水溶质运移模型构建和反应性溶质运移构建5个模块;采用全流程模式将…

计算机技术专硕,三维数字地球的学习路径?

三维数字地球是一个跨学科领域,涉及地理信息系统(GIS)、计算机图形学、遥感技术、大数据处理等多个方面。作为计算机技术专硕的学生,可以按照以下学习路径来逐步深入: 1、基础理论学习: 地理信息系统&…

C 408—《数据结构》算法题基础篇—链表(上)

目录 Δ前言 一、链表中特定值结点的删除 0.题目: 1.算法设计思想: 2.C语言描述: 3.算法的时间和空间复杂度: 二、链表链表最小值结点的删除 0.题目 : 1.算法设计思想 : 2.C语言描述 : 3.算法的时间和空间复杂度 : 三、链…

【FPGA数字信号处理】- FIR串行滤波器

理解和掌握 FIR 串行滤波器是踏入数字信号处理领域的重要一步。 那么,什么是 FIR 串行滤波器?它是如何工作的?又有着怎样的神奇之处呢?让我们一起揭开它的神秘面纱。 一、FIR 滤波器简介 FIR 滤波器,全称为有限脉冲…

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

目录 前言PointCNN实现细节1. X X X-Conv 操作输入输出步骤 2. PointCNN 网络架构层级卷积分类与分割任务 3. 数据增强4. 效率优化 前言 这篇论文介绍了一种名为 PointCNN 的方法,旨在从点云(point cloud)数据中学习特征。传统卷积神经网络…

【前端】探索webpack3项目build速度优化, 优化个p

文章目录 背景uglifyjs-webpack-pluginwebpack3 压缩混淆js 优化踩坑。结论 背景 webpack3 babel7 uglifyjs-webpack-plugin的项目,build起来是什么体验。 大抵是写了两个月后,发现build时间从120s激增到400s。而这400秒中,有50多秒是Ugli…

江协科技STM32学习- P11 中断系统,EXTI外部中断

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

Pygame中Sprite类实现多帧动画3-3

4 使用自定义类MySprite 使用自定义类MySprite实现多帧动画的步骤是首先创建MySprite类的实例,之后使用相关函数对该实例进行操作。 4.1 创建MySprite类的实例 创建MySprite类的实例的代码如图12所示。 图12 创建MySprite类的实例的代码 其中,变量dr…

Dagger:Android 和 Java 的快速依赖注入框架

在软件开发中,依赖注入(DI)是一种设计模式,用于实现控制反转,减少代码耦合,提高模块化。Dagger 是一个由 Google 开发的依赖注入库,专门用于 Android 和 Java 应用程序,以其快速和高…

TiDB-从0到1【完结】

来来回回3个月,TiDB-从0到1系列就此完结。 如果各位读者有时间整个系列阅读并根据内容掌握实操的话,最次也有中级TiDB工程师的水准了。 TiDB-从0到1-体系结构 TiDB-从0到1-分布式存储 TiDB-从0到1-分布式事务 TiDB-从0到1-MVCC TiDB-从0到1-部署篇 TiDB…

通信工程学习:什么是IFMP(Ipsilon流管理协议)

IFMP:Ipsilon流管理协议 IFMP(Ipsilon Flow Management Protocol),即Ipsilon流量管理协议,是一种用于网络流量管理的协议。它主要用于IP交换机、IP交换网关或IP主机中,通过控制数据传送,将现有网…

Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制

文章目录 Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制1. 前言2. 项目环境搭建3. 项目路由机制3.1. 1)先搜索pom.xml文件,看看使用了什么框架3.2. 2)确定是否是spring的路由机制3.3. 3)确定自写路由机制的…

Chapter 14 计算机网络基本概述

欢迎大家订阅【Vue2Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、网络的基本概念二、集线器、交换机和路由器三、互连网与互联网四、网络的类型五、互连网的组成1. 边缘部分2. 核心部分 六、网络协议 前言 计算机网络是现代信息社会…