【Redis】壹 —— Redis 介绍

文章目录:

前言

一、认识Redis

1. Redis

用途

作为数据库

作为流引擎

二、服务端高并发分布式结构演变

1. 单机架构

2. 应用数据分离架构

3. 应用服务集群架构

4. 读写分离 / 主从分离架构

5. 冷热分离 —— 引入缓存

6. 分库分表

7. 微服务架构

8. 概念补充

三、Redis的特性

四、Redis的应用场景

1. 作为数据库

2. 作为缓存 / session存储

3. 作为消息队列


前言

开始了对Redis的学习,通过博客对这一段时间的学习进行总结、分享!

一、认识Redis

我们先来看一下Redis官方对于Redis的描述

其中的关键词:“in - memory data store” ——> 在内存中存储数据

我们之前写的单机程序,都是通过变量来在内存中存储数据;

而对于分布式系统,多个进程同时访问一个变量,就可能会引起线程安全问题,所以在分布式系统中,使用Redis在内存中存储数据;

由于进程具有隔离性,每个进程的内存空间是分隔开的,使用网络,可以进行进程之间的通信;

1. Redis

Redis —— Remote Dictionary Server

用途

基于网络,把自己内存中的变量给别的进程/别的主机的进程使用

作为数据库

Redis也可以作为数据库来使用,那Redis相较于一般数据库(例如:MySQL、Oracle、SQL Server)有什么优点呢???

最大的优点,就是 —— 快!!

由于Redis是在内存中存储数据,而数据库是在硬盘中存储数据,程序访问内存的速度远远大于访问硬盘的速度,但也正因如此,Redis作为数据库也有一定的缺点 —— 存储空间小

关于速度,这里有谷歌公司给出的各层级硬件的执行速度供大家参考

那有没有方法做到又大又快呢??当然有!那便是——

将数据库和Redis结合起来,将Redis当作数据库的缓存(Cache),那缺点便是,程序的复杂性提高了。。。

作为流引擎

在官方介绍中,还有一个关键词 :Streaming Engine —— 流引擎

作用:作为一个消息中间件,消息队列,分布式系统下的生产者消费者模型

二、服务端高并发分布式结构演变

上文提到“单机程序”、“分布式系统”,那什么是单机程序?什么是分布式系统?单机程序又是如何一步步演化为分布式系统的呢?

1. 单机架构

只有一台服务器,这台服务器负责所有的工作

其中:

  • 应用服务:服务器程序——>写HTTP服务
  • 数据库服务:数据库服务器

缺点:业务进一步增长之后,一台服务器难以应付,一台主机的硬件资源是有限的(硬件资源包括但不限于:CPU、内存、硬盘、网络……)

解决方式:开源节流

  • 开源 ——> 引入更多的硬件资源 ——> 主机能增加的硬件资源也是有上限的 ——> 引入多台主机 ——> 程序上进行适配 ——> 分布式系统
  • 节流 ——> 优化,通过性能测试找出程序瓶颈,进行优化

2. 应用数据分离架构

应用服务和数据库服务在不同主机上完成

其中:

可以针对不同服务器的特点针对性的配置资源 —— 更高的性价比 :

  • 应用服务器 —— 包含很多业务逻辑 —— 更好的CPU和内存
  • 数据库服务 —— 更大的硬盘空间和更快的数据访问速度 or 固态硬盘(SSD)

3. 应用服务集群架构

引入更多的服务器节点

其中:

负载均衡器(网关):

  1. 也是一个单独的服务器
  2. 用户的请求先到达负载均衡器,由负载均衡器将请求分发给不同的应用服务器
  3. 负载均衡算法:最简单 —— 轮询算法(Round Robin) ——> 轮着来
  4. 对请求量的承担能力:
    1. 负载均衡器对请求的承担能力远远超越应用服务器
    2. 如果当前网关承受不了了,引入更多的负载均衡器 ——> 更多机房

4. 读写分离 / 主从分离架构

一主多从分离

5. 冷热分离 —— 引入缓存

引入缓存来存储被频繁访问的数据

其中:

  • 热点数据:被频繁访问到的数据
  • Redis的应用场景就是缓存服务器
  • 数据库中仍然存储的是全量数据,缓存服务器中存储的是热点数据的缓存

二八原则:20%的数据量可以支持80%的访问量

6. 分库分表

对数据进行拆分

7. 微服务架构

对业务进行拆分 —— 服务器的种类和数量增加

为了方便代码的维护,可以把复杂的服务器划分为更多的、功能单一、更小的微服务器

8. 概念补充

  • 应用/系统
    • 应用:一个/组服务器程序
  • 模块/组件
    • 一个程序实现了许多功能,每个独立的功能就叫一个模块/组件
  • 分布式(Distributed)
    • 引入多个主机/服务器,协同配合完成一系列的工作
    • 物理层面多个主机
  • 集群(Cluster)
    • 引入多个主机/服务器,协同配合完成一系列的工作
    • 逻辑层面多个主机
  • 主从(Master / Slave):
    • 分布式系统中一种典型的结构
    • 多个服务器,一个是主节点,其他的是从节点,从节点要从主节点同步数据
  • 中间件(Middleware)
    • 和业务无关的服务(功能更通用的服务)
  • 可用性(Availablity)
    • 考察单位时间段内,系统可以正常提供服务的概率/期望。
  • 响应时间(Response Time RT)
    • 指用户完成输入到系统给出相应的时间
  • 吞吐率(Throughput)/并发量(Concurrent)
    • 衡量服务器处理请求的能力的

三、Redis的特性

1. 在内存中存储数据

不同于关系型数据库通过表来组织数据,Redis是通过键值对的方式来组织数据(非关系型数据库)

key:只能是string类型

value:可以是string、list、hash、set......类型

2. Programmability

针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量进行一些操作

3. Extensibility

可以在Redis原有的功能基础上再进行扩展,Redis提供了一组API

4. Persistence 持久化

Redis是在内存中访问数据,而内存中的数据是易丢失的,Redis会将数据存储在硬盘中,当Redis重启了,就会在重启时加载硬盘的数据恢复到重启之前的状态

5. Clustering

Redis作为一个分布式系统中的中间件,能够支持集群

Redis可以水平扩展(相当于对数据库进行分库分表),可以引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分

6. High Availability 高可用

Redis自身也支持“主从”结构,从节点相当于主节点的备份

四、Redis的应用场景

1. 作为数据库

大多数情况下,对于数据库的要求优先考虑是“大”,但也有一些情况,对于数据库的要求是“快”,这种情况下,就可以使用Redis作为数据库

例:广告搜索 / 商业搜索 ——> 对性能要求很高,就需要把需要检索的数据存储在内存中

2. 作为缓存 / session存储

作为缓存

        对数据进行冷热分离

session存储

        cookie通过session配合实现用户身份信息的保存

                cookie:浏览器存储的用户的身份标识(SessionId)

                session:服务器存储的用户数据

        session一般存储与应用服务器中,而在分布式系统中:存在多个应用服务器,用户通过登录,其session存在一个应用服务器中,下次请求如果被负载均衡器分配到另一个应用服务器中,新的服务器中没有保存改用的session,就需要重新登陆

解决方案:

  • 让负载均衡器,将一个用户的请求分配给同一个服务器(不能采用轮询了)
  • 让Redis存储session,应用服务器在读取会话通过访问Redis服务器,这样一个用户的请求就可以被分配到任意的应用服务器上了;当应用程序重启时,会话不丢失。

3. 作为消息队列

基于这个可以实现一个网络版本的生产者-消费者模型

对于分布式系统来说,服务器和服务器之间有时候也需要用到生产者-消费者模型

优势:

        1. 解耦合

        2. 削峰填谷

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

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

相关文章

D88【python 接口自动化学习】- pytest基础用法

day88 pytest运行参数-q -s -v 学习日期:20241203 学习目标:pytest基础用法 -- pytest运行参数-q -s -v&pytest使用ini配置指定运行参数 学习笔记: pytest -q 说明:简化控制台的输出 pytest -q .\testcases\test_reques…

22 网络编程:Go 语言如何通过 RPC 实现跨平台服务

在上一讲中,我为你讲解了 RESTful API 的规范以及实现,并且留了两个作业,它们分别是删除和修改用户,现在我为你讲解这两个作业。 删除一个用户比较简单,它的 API 格式和获取一个用户一样,但是 HTTP 方法换…

java八股-流量封控系统

文章目录 请求后台管理的频率-流量限制流量限制的业务代码UserFlowRiskControlFilter 短链接中台的流量限制CustomBlockHandler 对指定接口限流UserFlowRiskControlConfigurationSentinelRuleConfig 请求后台管理的频率-流量限制 根据登录用户做出控制,比如 x 秒请…

AI给我们生活带来了哪些便利?

在21世纪的科技浪潮中,人工智能(AI)如同一股不可阻挡的力量,正深刻地改变着我们的生活方式,从日常琐事到复杂决策,无一不渗透着AI的智慧之光。它不仅极大地提升了生活效率,还为我们开启了前所未…

在vue3里使用scss实现简单的换肤功能

实现的换肤功能:主题色切换、亮色模式和暗黑模式切换、背景图切换 主题色就是网站主色,可以配置到组件库上面;亮色模式又分为两种风格:纯白风格和背景图风格,不需要背景图的话可以删掉这部分逻辑和相关定义&#xff1b…

css实现圆周运动效果

在CSS中可以通过 keyframes 动画 和 transform 属性实现元素的圆周运动。以下是一个示例代码&#xff1a; 示例代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content…

Python subprocess.run 使用注意事项,避免出现list index out of range

在执行iOS UI 自动化专项测试的时候&#xff0c;在运行第一遍的时候遇到了这样的错误&#xff1a; 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…

不一样的CSS(4)--icon图标系列之svg

序言 上一节内容我们讲解了如何利用css去画一个五角星&#xff0c;其中包括了使用svg的方法&#xff0c;有些小伙伴们对svg的使用不是很了解&#xff0c;那么本节内容我们主要来讲一下&#xff0c;关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…

springSecurity认证流程

Spring Security 是spring家族中的一个安全管理框架。相比于另一个安全框架Shiro&#xff0c;它提供更丰富的功能和社区资源&#xff0c;但也较难上手。所以一般大项目用spring Security&#xff0c;小项目用Shiro。 一般web应用需要认证和授权&#xff0c;这也是spring Secur…

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例:解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行和测试 五…

react跳转传参的方法

传参 首先下载命令行 npm react-router-dom 然后引入此代码 前面跳转的是页面 后面传的是你需要传的参数接参 引入此方法 useLocation()&#xff1a;这是 react-router-dom 提供的一个钩子&#xff0c;用于获取当前路由的位置对象location.state&#xff1a;这是从其他页面传…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】

&#x1f48c; 所属专栏&#xff1a;【单片机开发软件技巧】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xff1…

三菱CNC数采超详细,资料全备教程,后续更新发那科数采教程

三菱数采详细教程 文章目录 三菱数采详细教程一、介绍1.背景2.需要掌握知识3.需要资料①三菱SDK包&#xff1a;A2②三菱com接口文档③C#代码&#xff1a;④VStudio⑤资料存放网盘 二、程序运行1.调试设备①条件②命令 2.运行软件①打开软件②运行程序 三、数据采集1.代码了解2.…

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型&#xff1a;从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能技术的迅猛发展&#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…

混合云策略在安全领域受到青睐

Genetec 发布了《2025 年物理安全状况报告》&#xff0c;该报告根据超过 5,600 名该领域领导者&#xff08;其中包括 100 多名来自澳大利亚和新西兰的领导者&#xff09;的回应&#xff0c;揭示了物理安全运营的趋势。 报告发现&#xff0c;澳大利亚和新西兰的组织采用混合云策…

juc并发编程(下)

一些辅助类 减少计数CountDownLatch 设置一个计数器&#xff0c;通过countDown方法进行减1操作&#xff0c;使用await方法等待计数器不大于0&#xff0c;继续执行await方法之后的语句。 当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞 其他线程调用countDown方…

调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量

很多朋友在使用matlab时&#xff0c;会使用或自己编辑多个function函数&#xff0c;来满足自己对任务处理的要求&#xff0c;但是在调用function函数时&#xff0c;会出现这个问题&#xff1a;调用matlab用户自定义的function函数时&#xff0c;有多个输出变量只输出第一个变量…

计算机毕设-基于springboot的志愿者招募管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…