初始Redis

Mysql最大的问题在于,访问速度比较慢

而Redis是内存中存储数据的中间件,可以作为数据库使用,比较快,和Mysql相比,存储空间有限

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

那么要求更大更快,就可以把redis和mysql结合起来,采取二八原则,20%的热点数据,满足80%的访问需求

分布式系统(引入多个主机/服务器)

单机架构

单机程序中,能不能把数据库服务器也去掉,只剩一个应用服务器既负责业务,又负责数据存储?

可以的,但是很麻烦

如果业务进一步增长,用户量和数据量都很大,一台主机难以应付时,就需要引入更多的主机,引入更多的硬件资源

引入分布式,这是万不得已的,系统的复杂度会大大提高,出现bug的概率也更高

应用服务和数据库服务分离;

应用服务器,里面可能会包含很多的业务逻辑,会吃cpu和内存

数据库服务,需要更大的硬盘空间,更快的数据访问速度

引入负载均衡,更多的应用服务器节点

用户的请求,先到达负载均衡器

假设又1w的用户请求,2个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器承担5k的访问量

负载均衡器,看起来承担了所有的请求,可以顶住嘛?

负载均衡器对于请求量的承担能力,远超过应用服务器

  • 负载均衡器:领导,分配工作
  • 应用服务器:组员,执行工作

那么是否会出现,请求量大到负载均衡器也扛不住?

有可能!引入更多的负载均衡器

如上面所述,增加应用服务器,的确能够处理更高的请求量,但是随之存储服务器,要承担的请求量也更多了

读写分离,数据库主从结构

当然,数据库响应速度比较慢

把数据区分"冷热"

热点数据放到缓存中,访问的速度快很多

引入缓存,冷热数据分离

缓存服务器,只是放一小部分热点数据

是否会出现,一台服务器已经存不下数据,当然会

此时需要多台主机存储,拓展存储空间

分库分表

针对数据库进行进一步的划分,分库分表

本来一个数据库服务器,有多个数据库,现在就可以引入多个数据库服务器,每个存储一部分数据库

如果这个表特别大,一台主机存不下,也可以针对表拆分

微服务架构

从业务上进一步拆分应用服务器

之前应用服务器,一个服务器程序里面做了很多的业务,这就可能导致这一个服务器的代码变得越来越复杂

为了方便代码的维护,就可以把这样一个复杂的服务器,拆分成更多的,功能更单一,但是更小的服务器,服务器的种类和数量就增加了

注意:微服务本质上是在解决人的问题

应用服务器复杂了,就需要更多的人维护,人多,就需要配套的管理,划分组织结构,分工

按照功能,拆分成多组微服务,就有利于人员的组织结构分配

引入微服务,解决了人的问题,付出的代价?

1.系统的性能下降

拆出来更多的服务,多个功能之间要更依赖网络通信,通络通信的速度可能比硬盘还慢

2.系统复杂程度提高,可用性受到影响

服务器更多了,出现问题的概率就更大,这就需要一系列手段,来保证系统的可用性

微服务优势:

1.解决了人的问题

2.使用微服务,更方便功能的复用

3.可以给不同的服务提供不同的部署

Redis特性(官方文档)

in-memory data structures

在内存中存储数据

redis主要通过键值对的方式存储组织数据

key都是string,value可以是多种数据结构

Programmability

针对redis的操作,可以直接通过简单的交互式命令进行操作

也可以通过一些脚本的方式,批量执行一些操作 

Extensibility

可以在redis原有的功能基础上再进行拓展

redis提供了一组API 

Persistence

持久化

redis内存为主,硬盘为辅 

Clustering

redis作为一个分布式系统中的中间件,能够支持集群是很关键的

这个水平拓展,类似于分库分表 

High avaliability

高可用=>冗余/备份

redis自身也是支持主从结构的

为啥redis快?

1.redis数据在内存中,比访问硬盘快

2.redis核心功能都是比较简单的逻辑,操作内存的数据结构

3.从网络角度上,redis使用了IO多路复用的方式(epoll)

4.redis使用的是单线程模型,减少了不必要的线程之间的竞争开销

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

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

相关文章

修改银河麒麟操作系统V10(SP1)网卡名称为ethx

修改银河麒麟桌面操作系统V10(SP1)网卡名称为ethx 步骤一:查看当前网卡信息步骤二:修改GRUB配置文件步骤三:更新GRUB配置步骤四:编辑网络接口文件步骤五:重启机器 💖The Begin&#…

【Kubernetes】常见面试题汇总(五十五)

目录 121. POD 创建失败? 122. POD 的 ready 状态未进入? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 属于【Kube…

数据结构-排序1

1.排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序…

【项目安全设计】软件系统安全设计规范和标准(doc原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 资料获取:私信或者进主页。…

『网络游戏』窗口基类【06】

创建脚本:WindowRoot.cs 编写脚本: 修改脚本:LoginWnd.cs 修改脚本:LoadingWnd.cs 修改脚本:ResSvc.cs 修改脚本:LoginSys.cs 运行项目 - 功能不变 本章结束

【数据管理】DAMA-元数据专题

导读:元数据是关于数据的组织、数据域及其关系的信息,是描述数据的数据。在数据治理中,元数据扮演着至关重要的角色,是数据治理的基础和支撑。以下是对数据治理中元数据专题方案的详细介绍: 目录 一、元数据的重要性 …

Qt教程(001):Qt概述与安装

文章目录 一、Qt概述1.1 什么是Qt1.2 Qt优点1.3 Qt发展史1.4 支持的平台1.5 成功案例1.6 下载安装1.7 QtCreator介绍 一、Qt概述 1.1 什么是Qt Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的&…

如何高效使用Prompt与AI大模型对话

一、如何与人工智能对话 在人工智能的世界里,提示词(Prompt)就像是一把钥匙,能够解锁AI智能助手的潜力,帮助你更高效地获取信息、解决问题。但如何正确使用这把钥匙,却是一门艺术。本文将带你了解提示词的…

如何通过视觉分析检测车辆逆行行为

随着交通网络的快速扩展和车辆数量的持续增加,城市交通管理面临着前所未有的挑战。交通事故的多发原因之一是车辆逆行,这种行为不仅严重威胁其他车辆和行人的安全,也加重了交通拥堵问题。因此,如何有效监控并预防车辆逆行成为城市…

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45

异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…

用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画

总得拆开炼丹炉看看是什么样的。这篇文章将带你从代码层面一步步实现 AI 文本生成图像(Text-to-Image)中的 LoRA 微调过程,你将: 了解 Trigger Words(触发词)到底是什么,以及它们如何影响生成结…

计组与体系软题1-数据表示与校验码

一、数的编码方式 题1-0的表示 题2-补码的补码原码 1. 这道题涉及到数的编码范围和进制转换2. 题3-采用补码的目的 二、编码范围 题1-补码的表示范围(-2^(n-1)~2 ^(n-1)-1) n是字长/位数,2^7128,范围为-128~127题2-原码范围(-2^&#xff0…

LORD-GX5-45 ROS安装

1、驱动安装 https://github.com/LORD-MicroStrain/MSCL 上述下载 x64:C&#xff0c;在下载完的deb文件下执行 sudo dpkg -i <PACKAGE_NAME>.deb #install MSCL sudo apt install -f #install dependencies2、源码安装 #新建工作空间 mkdir -p ~…

【C++】认识匿名对象

文章目录 目录 文章目录前言一、对匿名对象的解读二、匿名对象的对象类型三、匿名对象的使用总结 前言 在C中&#xff0c;匿名对象是指在没有呗命名的情况下创建的临时对象。它们通常在单个语句中执行一系列操作或调用某个函数&#xff0c;并且不需要将结果存放进变量中。 匿名…

【STM32单片机_(HAL库)】4-2-1【定时器TIM】定时器输出PWM实现呼吸灯实验

1.硬件 STM32单片机最小系统LED灯模块 2.软件 pwm驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器输出PWM配置步骤main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "pwm.h"int main(void) {HA…

音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现

一、SCRIPTDATAVALUE类型 从《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中可以知道&#xff0c;根据《video_file_format_spec_v10_1.pdf》第80到81页&#xff0c;SCRIPTDATAVALUE类型由一个8位&#xff08;1字节&#xff09;的Type和…

动态代理有用吗?一文了解靠谱的动态代理有哪些标准

在当今互联网时代中&#xff0c;从网络安全、隐私保护、市场调研和互联网营销到软件测试、缓存管理和数据库连接&#xff0c;用户为了更好地完成此类工作&#xff0c;往往会使用动态代理&#xff0c;那么进一步了解动态代理、明确动态代理的使用场景和选择标准则是十分有必要的…

OJ在线评测系统 后端微服务架构 注册中心 Nacos入门到启动

注册中心 服务架构中的注册中心是一个关键组件&#xff0c;用于管理和协助微服务之间的通信。注册中心的主要职责是服务的注册和发现&#xff0c;确保各个微服务能够相互找到并进行调用。 主要功能&#xff1a; 服务注册&#xff1a;微服务在启动时&#xff0c;将自身信息&am…

vite学习教程01、vite构建vue2

文章目录 前言一、vite初始化项目二、修改配置文件2.1、修改main.js文件2.2、修改App.vue文件2.3、修改helloworld.vue2.4、修改vite.conf.js2.5、修改vue版本--修改package.json文件 三、安装vue2和vite插件四、启动服务资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&…

常见激活函数总结

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一. 激活函数的定义 激活函数&#xff08;Activation Function&#xff09;是人工神经网络中对每个神经元的输入进行非线性变换的函数。神经网络中的每个神经元都会接受来自上一层的输入&#xf…