【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
文章目录
- 介绍
- redis的引入
- 分布式系统
- 单机架构
- 应用服务和数据库服务分离
- 【负载均衡】引入更多的应用服务器节点

单机架构
分布式是什么
数据库分离和负载均衡
理解负载均衡
数据库读写分离
引入缓存
数据库分库分表
引入微服务
介绍
The open source, in-memory data store used by millions of developers as a databases ,cache, streaming engine, and message broker.
数百万开发人员使用的开源内存数据存储,作为数据库、缓存、流引擎和消息代理。
Redis 的初心,最初就是用来作为一个"消息中间件"的(消息队列),当前很少会直接使用 Redis 作为消息中间件(业界有更多更专业的消息中间件使用)
databases
MySQL 最大的问题在于访问速度比较慢。很多互联网产品中,对于性能要求很高。
Redis 也可以作为数据库使用.快!! 定性的角度,可以知道 Redis 快很多,但是很难定量衡量
redis和mysql相比最大的劣势,存储空间是有限的!!
虽然有不少的互联网产品,对于性能要求比较高的.更多的互联网产品对于性能要求没那么高。
又大又快可以把 Redis 和 MySQL 结合起来使用,但是系统的复杂程度大大提升了,而且, 如果数据发生修改,还涉及到 Redis 和 MySQL 之间的数据同步问题。
"二八原则”,20% 的热点数据, 能满足 80% 的访问需求
streaming engine
分布式系统下的生产者消费者模型。
redis的引入
定义变量,不就是在内存中存储数据嘛?
Redis 是在分布式系统中才能发挥威力的。如果只是单机程序,直接通过变量存储数据的方式是比使用 Redis 更优的选择。
由于进程 的隔离性!!进程间通信=>网络
Redis 就是基于网络,可以把自己内存中的变量给别的进程甚至别的主机的进程进行使用
分布式系统
单机架构
只有一台服务器,这个服务器负责所有的工作。
MySQL 是一个客户端服务器结构的程序!!!本体是 MySQL 服务器(存储和组织数据的部分)
单机程序中,能不能把数据库服务器也去掉,光一个应用服务器又负责业务,又负责数据存储?(也不是不可以,但是就是会比较麻烦)
绝大部分的公司的产品,都是这种单机架构!!!现在计算机硬件,发展速度非常之快
哪怕只有一台主机,这一台主机的性能也是很高的.可以支持非常高的并发 & 非常大的数据存储,
如果业务进一步增长,用户量和数据量都水涨船高,一台主机难以应付的时候,就需要引入更多的主机,引入更多的硬件资源。
一台主机的硬件资源是有上限的!!!
1.CPU
2.内存
3. 硬盘
4. 网络
6…
服务器每次收到一个请求,都是需要消耗上述的一些资源的
如果同一时刻,处理的请求多了,此时就可能会导致某个硬件资源,不够用了!!!
无论是哪个方面不够用了,都可能会导致服务器处理请求的时间变长,甚至于处理出错
如果我们真的遇到了这样的服务器不够用的场景,怎么处理呢?
1.开源 -简单粗暴,增加更多的硬件资源~-
2.节流-软件上优化.(各凭本事了,需要通过性能测试,找到是哪个环节出现了瓶颈,再去对症下药)
难!! 对于程序猿的水平要求就比较高了
一个主机上面能增加的硬件资源也是有限的取决于主板的扩展能力
主机扩展到极限了,但是还不够,就只能引入多台主机了!!!
不是说新的机器买来就直接可以解决问题了.也需要软件上做出对应的调整和适配
一旦引入多台主机了,咱们的系统就可以称为是"分布式系统"
引入分布式,这是万不得已,无亲之举,系统的复杂程度会大大提高。出现 bug 的慨率越高, =>加班的概率 & 丢失年终奖的概率 提高。
应用服务和数据库服务分离
应用服务器,里面可能会包含很多的业务逻辑, 可能会吃 CPU 和 内存.
数据库服务器, 需要更大的硬盘空间,更快的数据访问速度可以配置更大硬盘的服务器,甚至还可以上 SSD 硬盘(固态硬盘)。
1.机械硬盘,便宜,慢 2. 固态硬盘, 贵, 快
【负载均衡】引入更多的应用服务器节点
负载均衡就像公司的一个组的领导一样,要负责管理,要负责把任务分配给每个组员。
应用服务器可能会比较吃 CPU 和 内存,如果把 CPU 或者内存吃没了,此时应用服务器就顶不住了,引入更多的应用服务器,就可以有效解决上述问题。
用户的请求,先到达负载均衡器/网关服务器(单独的服务器),对于负载均衡器来说,有很多的 负载均衡 具体的算法,假设有 1w 个用户请求,有 2 个应用服务器,此时按照负载均衡的方式,就可以让每个应用服务器承担 5k 的访问量,这个和"多线程"有点像。
相关文章:

【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}
文章目录 介绍redis的引入 分布式系统单机架构应用服务和数据库服务分离【负载均衡】引入更多的应用服务器节点 单机架构 分布式是什么 数据库分离和负载均衡 理解负载均衡 数据库读写分离 引入缓存 数据库分库分表 引入微服务 介绍 The open source, in-memory data store us…...

C#高级:常用的扩展方法大全
1.String public static class StringExtensions {/// <summary>/// 字符串转List(中逗 英逗分隔)/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List&…...

Consul持久化配置报错1067---consul_start
报错都是文件写的有问题或者格式问题,直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在:mydata 注:D:\consul\consul_1.20.2_windows_386改成自己consul的…...

「 机器人 」扑翼飞行器控制策略浅谈
1. 研究背景 • 自然界中的蜂鸟以极高的机动能力著称,能够在短至0.2秒内完成如急转弯、快速加速、倒飞、躲避威胁等极限机动。这种表现对微型飞行器(Flapping Wing Micro Air Vehicles, FWMAVs)具有重要的仿生启示。 • 目前的微型飞行器距离自然生物的飞行能力仍有相当差距…...

Qt信号与槽底层实现原理
在Qt中,信号与槽是实现对象间通信的核心机制, 类似于观察者模式。当某个事件发生后,比如按钮被点击,就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,将想要处理的信号和自己的一个函数(称为槽…...

QT QTableWidget控件 全面详解
本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

Flutter_学习记录_基本组件的使用记录
1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有: TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例: body: Center(child: Text(开启 TextWidget 的旅程吧,珠珠, 开启 TextWidget 的旅程吧&a…...

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘
解决PyCharm下PyEMD安装报错 PyEMD安装报错解决方案 PyEMD安装报错 PyCharm下通过右键自动安装PyEMD后运行报错ModuleNotFoundError: No module named ‘PyEMD’ 解决方案 通过PyCharm IDE python package搜索EMD-signal,选择版本后点击“install”执行安装...

Gin 应用并注册 pprof
pprof 配置与使用步骤 1. 引言 通过下面操作,你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据,并通过图形化界面进行深度分析。 1. 安装依赖 首先,确保安装了 gi…...

Jenkins 启动
废话 这一阵子感觉空虚,心里空捞捞的,总想找点事情做,即使这是一件微小的事情,空余时间除了骑车、打球,偶尔朋友聚会 … 还能干什么呢? 当独自一人时,究竟可以做点什么,填补这空虚…...

第20篇:Python 开发进阶:使用Django进行Web开发详解
第20篇:使用Django进行Web开发 内容简介 在上一篇文章中,我们深入探讨了Flask框架的高级功能,并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django,另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…...

文献引用指南ChatGPT提示词分享
文献引用指南 在学术写作中,准确引用是至关重要的环节。它不仅能够为您的研究提供坚实的学术基础,还能确保您尊重并认可他人的学术成果,从而有效避免抄袭的问题。而ChatGPT在这一方面同样能够为您提供有力的支持。借助ChatGPT,您…...

程序代码篇---C++类.c\.h
文章目录 前言第一部分:C中的类1.类的定义2.成员变量(属性)3.成员函数(方法)4.访问修饰符私有受保护公有 5.构造函数和析构函数成员初始化列表方法重载 6.继承7.多态8.友元 第二部分:.c与.h文件头文件&…...

@RabbitListener处理重试机制完成后的异常捕获
application.properties中配置开启手动签收 spring.rabbitmq.listener.direct.acknowledge-modemanual spring.rabbitmq.listener.simple.acknowledge-modemanual定义一个重试器 Slf4j Configuration public class RabbitMQRetryConfing {Bean("customRetry")publi…...

Mac 上管理本地 Go 版本
在 Mac 上修改本地 Go 版本可以通过多种方法实现。以下是几种常见且详细的操作方案: 方法一:使用 goenv 管理多版本(推荐) 适用场景:需要频繁切换不同 Go 版本,适合长期开发者。 步骤: 安装 g…...

低代码系统-产品架构案例介绍、得帆云(八)
产品名称 得帆云DeCode低代码平台-私有化 得帆云DeMDM主数据管理平台 得帆云DeCode低代码平台-公有云 得帆云DePortal企业门户 得帆云DeFusion融合集成平台 得帆云DeHoop数据中台 名词 概念 云原生 指自己搭建的运维平台,区别于阿里云、腾讯云 Dehoop 指…...

免费GPU算力,不花钱部署DeepSeek-R1
在人工智能和大模型技术飞速发展的今天,越来越多的开发者和研究者希望能够亲自体验和微调大模型,以便更好地理解和应用这些先进的技术。然而,高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是,腾讯云Cloud Studio提供了免…...

JavaEE:多线程进阶
JavaEE:多线程进阶 一、对比不同锁策略之间的应用场景及其区别1. 悲观锁 和 乐观锁1.1 定义和原理1.2 应用场景1.3 示例代码 2. 重量级锁 和 轻量级锁2.1 定义和原理2.2 应用场景2.3 示例代码 3. 挂起等待锁 和 自旋锁3.1 定义和原理3.2 应用场景3.3 示例代码 4. 几…...

不只是mini-react第二节:实现最简fiber
省流|总结 首先,我们编写JSX文件,并通过Babel等转换工具将其转化为createElement()函数的调用,最终生成虚拟 DOM(Vdom)格式。举个例子: // 原始 JSX const App <div>hi-mini-react</div>;//…...

C++实现设计模式---命令模式 (Command)
命令模式 (Command) 命令模式 是一种行为型设计模式,它将请求封装为一个对象,从而使得可以用不同的请求对客户端进行参数化、对请求排队或记录日志,以及支持可撤销的操作。 意图 将操作的调用者与接收者分离,通过将请求封装为独…...

设计模式的艺术-享元模式
结构性模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。 在享元模式中,存储这些共享实例对象的地方称为享元池&…...

Linux的权限和一些shell原理
目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型: 基本权限: chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后: 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…...

【Postgres_Python】使用python脚本批量创建和导入多个PG数据库
之前批量创建和导入数据库分为2个python脚本进行,现整合优化代码合并为一个python脚本,可同步实现数据库的创建和数据导入。之前的文章链接: 【Postgres_Python】使用python脚本批量创建PG数据库 【Postgres_Python】使用python脚本将多个.S…...

Ubuntu安装GitLab
在 Ubuntu 上安装 GitLab 的步骤如下。这里以 GitLab Community Edition(CE)为例: 前提条件 确保你的 Ubuntu 系统是 20.04 或更高版本。确保你的系统满足 GitLab 的硬件要求。 步骤 更新系统包: sudo apt update sudo apt upg…...

网络知识小科普--5
81、什么是组播路由? 组播路由是一种有针对性的广播形式,将消息发送到所选择的用户组,而不是将其发送到子网上的所有用户。 82、加密在网络上的重要性是什么? 加密是将信息转换成用户不可读的代码的过程。然后使用秘密密钥或密码将其翻译或解密回其…...

JavaScript学习记录23
第十一节 JSON对象 1. JSON 格式 JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。 相比 XML 格式,JSON 格式有两个显…...

VScode 开发 Springboot 程序
1. 通过maven创建springboot程序 输入 mvn archetype:generate 选择模板,一般默认选择为第 7 种方式; 选择之后,一般要你填写如下内容: groupId: 组织名称;artifactId: 项目名称;version: 版本࿰…...

.git/hooks/post-merge 文件的作用
.git/hooks/post-merge 文件是 Git 版本控制系统中的一个钩子(hook)脚本,其作用是在合并(merge)操作完成后自动执行一些特定的操作。以下是关于 .git/hooks/post-merge 文件作用的详细解释: 作用 自动化任…...