Redis -- 前置知识

news2025/1/16 8:19:52

目录

简要

分布式系统

负载均衡

引入缓存

数据库分表

微服务                        

小结


简要

        redis是存储数据在内存中, 定义变量就是在内存中, 但是redis是在分布式系统中, 才能真正发挥威力, 如果只是单机程序, 那么直接通过变量来存储数据的方式将是最优的选择.

        redis是如何发挥威力的? 首先进程之间是具有隔离性的, 一个进程想要获取另外一个进程的变量, 由于隔离性是无法直接获取的, 需要进程之间的通信, 也就是通过网络的形式进行通信的, redis就是利用这一点进行了一个封装, 将内存中的变量分享给别的进程, 或者是别的主机的进程进行使用.

        redis现在已经被非常多的人使用, 他通常被当做数据库, 缓存流引擎, 中间件等等.

        不是有mysql吗? 为什么还需要redis? MySQL最主要的问题就是慢, 很多互联网多产品的性能要求是很高的. 如果要性能, 就需要使用除了MySQL的其他更高性能的技术, redis就是其中之一, redis是使用内存的作为数据库使用, 内存的速度是比外存的速度是快很多的.

        下面是各种存储器性能对比: 

         Redis是很快的, 因为内存的原因, 但是正是因为如此, 他们使用的场景和条件还是有限制的.

        它的劣势也很显然, 既然是内存存储的形式, 那么内存的成本肯定是被硬盘等存储的成本高的. MySQL相比来说具有更大的存储空间和更低的成本, mysql也提供了更多的增删改查的功能.

        那么有没有一种又快成本又低的存储方式? 最简单的方法就是将两者结合, 典型的方案: Redis和Mysql结合, 也就是将最常用的数据存储在redis, 全部数据存储在mysql, 那么redis就相当于mysql的一个缓存,但是代价就是系统的复杂程度就大大提升了, 且如果数据发生修改, 那么就涉及到redis和mysql的数据同步问题. 这些都是我们接下来要学习的内容.

分布式系统

        我们之前的学习都是基于单机架构, 所谓单机架构, 就是只有这一台服务器:

        假设为一个电商网站, 其实这里的应用服务就是一个http服务器, 用户发送http请求, 然后应用服务提交请求, 提供数据库服务, 完成服务. 公司绝大部分公司的产品, 都是这种单机架构. 

        但是当用户量, 数据量非常大的时候, 一台主机的硬件资源(cpu,内存, 硬盘, 网络)是有限的, 一台主机不够用了, 就需要多个这样的单机架构, 引入更多的硬件资源, 构成一个分布式系统.

        除了连接多台主机, 还可以在程序上进行优化, 也就是节流, 通过各种性能测试, 找出是哪个环节出现了瓶颈, 然后做出对应的优化. 但是这种方法对于程序员的水平要求较高.

        更简单粗暴的方法那就是在硬件上面解决性能问题. 你可以换一个能处理更多线程的cpu, 更好的网卡, 更快的内存, 但是一个主机的极限性能仍然是存在上限的, 还不够的话那么就可以引入更多的主机.

        当然不是新的机器买来就可以直接使用的, 在软件上还需要做出代码上的调整. 整体系统的复杂度就更高了, 复杂程度可能呈现一个指数级别增长, bug出现的概率可能更高. (也是属于很无奈了)

         下面这个模型是应用服务和数据库服务分离:

        应用服务器里面需要处理业务逻辑, 对cpu和内存有更高的要求, 存储服务器则需要更大的存储空间(硬盘空间>> 固态硬盘, 机械硬盘),  以此达到一个更高的性价比

        引入更多的服务器:

        应用服务器会消耗cpu, 但是如果cpu性能被消耗完了. 服务器就顶不住了, 此时引入另外一个服务器主机(也可能是多个), 就可以解决上述问题.  用户的请求先到达负载均衡器, 假设有1w个请求, 按照负载均衡的机制, 就让每个主机负责5000个请求(根据性能调节)

        负载均衡器(就像一个公司领导负责员工的任务), 有很多个均衡的方法, 具体使用哪个方法, 需要根据场景来进行选择

负载均衡

         负载均衡器对于请求量的承担能力, 要远超应用服务器的, 就比如我们刚才那个例子, 负载均衡负责分配工作.

软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。

软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。

硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。

 

        既然是有更多的web服务, 那么就意味着更多的web请求, 这么多的web请求, 对于存储服务器来说肯定是会带来更大的压力的. 数据库对于这个请求压力时更加敏感的. 

        为了解决这个问题, 使用节流的方法, 将数据库的读写进行分离:

        此时的存储服务器变成量两台了, 一台是主(master)数据库, 一台从(slave)数据库. 写数据就往主数据库中写, 读取数据就从从数据库中读取, 同时我们定时的将主数据库中的数据同步到从数据库中(实际情况上, 读的操作是比写的操作多的) (因此主服务器一般是一个,从数据库可以有多个).

引入缓存

        使用的存储服务器大多部分都是进行读取操作, 但是读取的内容化中又有冷热之分, 所谓冷热, 也就是经常要查的数据和不是很频繁需要读取的数据. 对于需要频繁读取的部分, 我们将其放入缓存之中, 访问的速度就会比直接从数据库中访问快多了:

         这个缓存服务器(redis)只是存放少部分数据, 这个数据被称为热点数据, 他们通常会执行二八原则, 也就是20%的数据能够支持80%的访问量(缓存服务器中存储着总数据量的20%的数据, 80%的请求都是访问这个缓存服务器中的数据).

        为什么不把所有的数据都放入缓存?  因为是内存中存储, 内存中存储就要考虑成本!!

        此时缓存服务器就帮助数据库服务器负重前行!! 

数据库分表

        引入分布式系统,不光要能够去应对更高的请求量,同时也要能应对更大的数据量。是否可能会出现一台服务器已经存不下数据了呢?就需要多台主机来存储。

        上面这张图就是讲的对数据库进行分库分表。首先对数据库进行分库,讲一个数据库分为多个数据库, 可以讲引入多个数据库服务,每个数据库服务器存储一个或者一部分。比如现在要访问用户表, 那么就到对应的存储用户信息的存储集群中去请求, 如果是写,就使用主数据库,如果是读取就是用从数据库。

        当然如果某个表特别大, 大到一个主机存不下,那么也可以针对表进行拆分。

微服务                        

         之前的应用服务器, 一个服务器程序里面做了很多个业务,这可能会导致一个服务器的代码会越来越复杂, 为了方便代码的维护,可以将服务器拆分为更多的更小的,功能更加单一的小服务器。与此同时,服务器的种类和数量增加了。

        他们各自有各自的应用服务器,缓存和存储集群。微服务本质上是在解决人的问题,当服务器变得复杂,就需要更多的人来维护,但是人也是需要成本和管理的。将这些人进行分组来管理每一个子系统,将更加方便管理代码。

        啥时候涉及到人的问题?当然是大公司,拥有一定开发者基数的公司一般会有微服务的项目。

        解决问题的技术肯定是有代价的。那代价是什么?

  1. 系统性能下降 -- 拆分出来的更多的服务,多个功能之间要依赖网络通信,网络通信的速度是非常慢的,是比硬盘还要慢的。想要保证性能,就得引入更多的硬件资源。(幸运的是现在的硬件是非常先进的
  2. 系统的复杂程度提高了不少,可用性降低,出现问题的概率也会变大。这需要更加完善的监控系统和运维人员

        微服务有哪些优势?

  1. 解决了人的问题
  2. 方便功能的服用
  3. 可以给不同的服务进行不同的部署

小结

  • 单机架构: 应用程序 +数据库服务器 
  • 数据库和应用分离(应用和数据库部署在不同主机
  • 负载均衡器:将请求均匀的,合理的分发给集群中的应用服务器,提高服务器的可用性
  • 读写分离,主从式数据库:一个数据库作为主节点,n个数据库作为从节点,主负责写,从负责读(主数据库需要给从服务器进行同步操作
  • 缓存,冷热数据分离:进一步提高服务器请求的处理能力(引入的问题:缓存同步问题
  • 分库分表:进一步扩展存储空间
  • 引入微服务:从业务上拆分应用服务器

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

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

相关文章

同为科技(TOWE)自动控制循环定时插座

随着科技的发展,智能化家居已成为我们生活的重要组成部分。作为国内领先的智能家居品牌,同为科技(TOWE)推出的自动控制循环定时插座,无疑将科技与生活完美地结合在一起。 1.外观设计 同为科技(TOWE&#x…

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求

全能相似度计算与语义匹配搜索工具包,多维度实现多种算法,涵盖文本、图像等领域。支持文图搜索,满足您在不同场景下的搜索需求。 Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索 Similar…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

一道CTF签到题

点击题目的签到,提示: 看来需要修改请求的源地址: 上来我先尝试了我最常用的xff,结果不行,于是尝试了其他的几个常用请求头: 1.host头 如果后端从host取值来判断是否是本地就可以通过此方法进行绕过&…

简洁思路推理 KMP 算法——子字符串匹配

例题 28. 找出字符串中第一个匹配项的下标 暴力遍历解法 枚举原串 ss 中的每个字符作为「发起点」,每次从原串的「发起点」和匹配串的「首位」开始尝试匹配: 匹配成功:返回本次匹配的原串「发起点」。 匹配失败:枚举原串的下一个…

Python实战:将爬虫获取到的数据存到数据库中

在前几篇 Python 实战中,我们直接把爬虫获取到的数据存储到 excel 文件或者 csv 文件中。今天,我们将爬虫获取到的数据存储到数据库中。 而存到数据库中,我们可以选择 MySQL、PostgreSQL、SqLite、Sql Server 等数据库。 在这些数据库中 Sq…

重装Windows系统出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区

文章目录 1.问题描述2.问题解决 1.问题描述 重装Windows系统时,出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区这个提示 2.问题解决 1.shiftF10,打开命令行 2.输入:diskpart (打开分区工具) 3.输入:list di…

C语言“%”运算符是否可以对小数进行运算?

一、问题 “&#xff05;”运算符是否可以对⼩数进⾏运算&#xff1f; 二、解答 “&#xff05;”运算符&#xff0c;称为求余运算符或者模运算符&#xff0c;要求“&#xff05;”两侧都为整型数据&#xff0c;否则将会产⽣错误 #include <stdio.h> int main() {floa…

电路笔记 :MOS场效应晶体管+红外遥控+AMS1117 电源模块

三极管&#xff08;BJT&#xff0c;Bipolar Junction Transistor&#xff09;和 MOSFET&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;是两种不同类型的晶体管&#xff0c;它们在工作原理、性能特性和应用方面有一些重要的区别。 结构和工作原理…

Qt项目文件以及对象树

"在哪里走散&#xff0c;你都会找到我~" 前篇&#xff0c;我们仅仅对Qt创建了第一个简单的项目。相比于使用其他IDE创建工程项目&#xff0c;Qt会为自动创建诸如&#xff1a;.pro、.h\.cpp、.iu等文件&#xff0c;这些文件到底是什么&#xff1f;我们在使用Qt时 应该…

欢迎来到 Greasy Fork,这里是一个提供用户脚本的网站。

官方地址&#xff1a; https://greasyfork.org/zh-CN 欢迎来到 Greasy Fork&#xff0c;这里是一个提供用户脚本的网站。 脚本适用于&#xff1a; baidu.com bilibili.com qq.com iqiyi.com sohu.com 更多… 用户脚本是什么&#xff1f; 用户脚本是一段代码&#xff0c;它们能…

前端——CSS

目录 文章目录 前言 一.CSS简介 1.CSS选择器 2.CSS选择器语法 3.CSS样式引入 4.CSS 高级选择器 二.CSS样式 1.字体 ​编辑 2.文本 3. 背景 4.边框 5.边距 6.浮动 7.清除浮动 8.定位 9. 列表样式 10.伪类样式 三.盒子模型 四.CSS3新特性 1.边框 2.盒子阴影 …

win11设置mysql开机自启

目录 命令式 1、打开命令提示符或 PowerShell&#xff1a; 2、使用管理员权限运行命令行工具&#xff1a; 3、设置 MySQL 服务为开机自启动&#xff1a; 4、启动 MySQL 服务&#xff1a; 5、 验证设置是否生效&#xff1a; 操作视图式 1、右击任务栏 ---> 选择任务管…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习、模仿学习、机器人、开放词汇

专属领域论文订阅 关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新论文。 分类: 大语言模型LLM视觉模型VLM扩散模型视觉…

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程

经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构及前向处理过程 和之前实现的YOLOv2一样&#xff0c;根据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;在不脱离YOLOv3的大部分核心理念的前提下&#xff0c;重构一款较新的YOLOv3检测器&#xff0c;来对YOLOv3有…

网络安全科普:SSL证书保护我们的网上冲浪安全

当我们在线上愉快冲浪时&#xff0c;各类网站数不胜数&#xff0c;但是如何判定该站点是安全还是有风险呢&#xff1f; 当当当&#xff0c;SSL数字证书登场&#xff01;&#xff01; SSL证书也称为数字证书&#xff0c;是一种用于保护网站和用户之间通信安全的加密协议。由权…

SERVLET生命周期API

SERVLET生命周期API 在servlet的生命周期中,将发生创建Servlet上下文、创建会话、向Servlet上下文添加属性等各种事件。在servlet的生命周期内发生事件时,Web容器将通知侦听器类。要接收事件的通知,侦听器类需要扩展Servlet API的侦听器接口。 1. 事件类型 servlet生命周期…

DeepL 解除翻译文档的编辑限制

在使用DeepL官网翻译文档时&#xff0c;您可能会遇到无法编辑的问题。本文将详细介绍如何解除密码限制&#xff0c;使DeepL翻译文档变得可编辑。 第一步&#xff1a;文档翻译和下载 将需要翻译的文档上传至DeepL&#xff0c;进行整篇文档翻译。完成翻译后&#xff0c;下载翻译…

yum指令——Linux的软件包管理器

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 什么是软件包yum指令1.yum 是什么&#xff1f;2.Linux系统&#xff08;Centos&#xff09;的生态 3.yum的相关操作安装卸载yum的相关操作小结 软件源安…

[攻防世界]-Web:inget解析

查看网页 很明显&#xff0c;他是要我们输入id 这里我尝试了直接爆破&#xff0c;没有成功 解法一&#xff08;用万能密码&#xff09;&#xff1a; payload如下&#xff1a; 我这里还尝试了id1 or true # 没有成功&#xff0c;应该是题目把#给过滤了 解法二&#xff1a; …