2023.12.17 关于 Redis 的特性和应用场景

目录

引言

Redis 特性

内存中存储数据

可编程性

可扩展性

持久化

支持集群

高可用性

Redis 优势

Redis 用作数据库

Redis 相较于 MySQL 优势

Redis 相较于 MySQL 劣势

Redis 用作缓存

典型场景

Redis 存储 session 信息 

Redis 用作消息队列

初心

消息队列的优势

Redis 适用于消息队列的场景


引言

  • Redis 是一个在内存中存储数据的中间件
  • 用作为数据库,用作为数据缓存
  • 在分布式系统中能够大展拳脚

Redis 特性

内存中存储数据

  • 奠定了 Redis 在进行 访问 和 存储 时比较快 的基本特点

注意:

  • 相较于 单机程序 直接通过 变量 内存中存储数据
  • Redis 可以实现在 分布式系统 中让 多个服务器共享同一份数据,并且这些数据能够存储在内存中以提高访问速度

实例理解

  • 进程之间具有隔离性,每个进程都是被隔离开的,进程 A 无法直接读进程 B 中的数据
  • 一个分布式系统往往会涉及到多个进程,且这多个进程均分布在不同的主机
  • 当我们想访问其他进程中的变量时,这是具有一定难度的
  • 而 Redis 则针对我们上述的需求进行了一个封装
  • 网络作为进程间的通信关键介质,Redis 就是基于网络可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用!

可编程性

  • 针对 Redis 的操作,我们可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式 批量执行一些操作(可以带有一些逻辑)
  • 如 Redis 支持使用 Lua 编写脚本,这些脚本可以在 Redis 服务器端执行
  • 通过脚本,可以实现复杂的数据操作和逻辑,比如批量操作、事务、原子性操作等

可扩展性

  • Redis 原有的功能基础上通过 C、C++、Rust 这些语言编写 Redis 扩展
  • Redis 自身已经提供很多数据结构和命令,可通过扩展让 Redis 支持更多数据结构和命令

持久化

  • 在内存中存储数据可能因为进程退出或系统重启导致数据的丢失
  • 但 Redis 以内存为主、硬盘为辅,硬盘对数据进行备份
  • Redis 重启则会重新加载硬盘中备份数据到内存上,从而保证持久化

支持集群

  • Redis 提供了一种分布式架构,允许将数据分布在多个节点上,以实现数据的水平扩展和高可用性
  • 一个 Redis 能存储的数据空间是有限的,引入多个主机,部署多个 Redis 节点,对数据进行分散存储,扩大存储空间

高可用性

  • Redis 支持 主从结构,从节点相当于主节点的备份,当哪一个节点故障时,Redis 集群可以自动进行故障转移,将一个从节点提升为新的主节点,以保持服务的可用性
  • 故障转移过程中,集群会重新分配数据槽,并重新配置主从关系

Redis 优势

  • Redis 在处理数据请求时具有 高效率 和 快速响应 的优势

分析原因:

  • Redis 的数据存储在内存中,相比于访问硬盘的数据库,内存的读写速度要快得多
  • Redis 的核心功能主要是操作内存的数据结构,这些操作通常比较简单,因此执行速度快
  • Redis 使用了 IO 多路复用的方式(如 epoll),即使用一个线程管理多个 socket,这样可以提高网络通信的效率
  • Redis 使用的是单线程模型(虽然更高版本的 Redis 引入了多线程),这样的单线程模型,减少了不必要的线程之间的竞争开销

注意:

  • 多线程提高效率的前提是 CPU 密集型的任务,使用多个线程可以充分的利用 CPU多核资源
  • 但是 Redis 的核心任务主要就是操作内存的数据结构,不会吃很多 CPU,反而会因为加锁,导致线程竞争,导致性能的效率受到影响

Redis 用作数据库

  • MySQL 主要是通过 表 的方式来存储组织数据的(关系型数据库)
  • Redis 主要通过 键值对 的方式来存储组织数据的(非关系型数据库)

Redis 相较于 MySQL 优势

  • Redis 在内存中存储,其访问速度十分快
  • 相较于 MySQL 在硬盘中存储,其访问速度要慢得多
  • 从而当在一些对性能要求很高的互联网产品中,Redis 也被当作数据库进行使用!

Redis 相较于 MySQL 劣势

  • Redis 与 MySQL 相比的最大劣势为存储空间相对有限
  • 如果应用对性能要求不高 且 需要存储大量的数据 时,MySQL 应作为首要选择

注意:

  • 此处将 Redis 用作数据库,存储的是 全量数据,即这里的数据是不能随便丢弃的

Redis 用作缓存

典型场景

  • 我们可以将 Redis 和 MySQL 结合起来使用,从而达到存储空间又大且访问速度又快的需求
  • ' 二八原则 ',即 20% 的热点数据能满足 80% 的访问需求,利用该点将 Redis 用作缓存
  • 我们可以将热点数据放到 Redis 中进行存储,以满足我们大部分的访问需求!

问题:

  • 系统的复杂程度大大提高
  • 当数据发生修改,还涉及到 Redis 和 MySQL 之间的数据同步问题!

注意:

  • 此处 Redis 存的是部分数据,全量数据都是以 MySQL 为主的
  • 哪怕 Redis 的数据没了,还可以从 MySQL 这边再加载回来

Redis 存储 session 信息 

  • 在 Web 应用程序中,session 用于跟踪和存储用户的会话状态信息!
  • Redis 存储 session 信息属于 Redis 缓存 的经典应用场景

实例理解

  • 分布式部署应用程序
  • 将 session 信息存储在应用程序的内存中


问题:

  • 当用户再次发起登录请求时,负载均衡器如何将同一个用户的请求始终分配到同一个机器上

解决方案一:

  • 负载均衡器不再使用轮询操作,而是通过 userId 来进行服务器的分配
  • 此时有三台应用服务器,只需将 userId 对 3 进行求余操作,每个余数对应一台应用服务器

解决方案二:

  • 将所有 session 会话都存储到 Redis 上,让所有服务器从 Redis 中拿去相应的 session 信息
  • 由于将会话放到 Redis 中进行存储,所以万一应用程序重启,会话也不会丢失!

Redis 用作消息队列

初心

  • Redis 最初就是用来作为一个“消息中间件”(消息队列)来使用的,即 分布式系统下的生产者消费者模型(网络版生产者消费者模型)
  • 但很少会使用 Redis 来作为消息中间件,因为业界有更多专业的消息中间件进行使用!
  • 当前 Redis 主要还是被用作数据库和缓存!

消息队列的优势

  • 解耦:发送者和接收者之间通过消息队列进行通信,互不直接依赖或了解对方存在,这种解耦使得系统组件能够独立地进行扩展
  • 削峰填谷:消息队列能够平衡系统的负载,当消息发送过快,队列可以缓冲消息并按照接收者的处理能力进行消费,从而防止系统过载

Redis 适用于消息队列的场景

  • Redis 由于其高性能和支持丰富的数据结构,它也被广泛用于构建 轻量级 的消息队列系统
  • 如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖,此时的 Redis 就可以作为一个选择

总结:

  • 相对于更高级功能和更复杂的消息处理逻辑,需要用到专门的消息队列中间件,如RabbitMQ、Apache Kafka 等
  • 这些中间件提供了更丰富的功能和更强大的扩展性,适用于更复杂的消息处理场景!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis之五种基本数据类型

redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是:String、List、Set、Zset、Hash 一) 字符串(String) String是redis最基本的类型,v…

175. 电路维修(BFS,双端队列)

175. 电路维修 - AcWing题库 达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上。 翰翰的家里有一辆飞行车。 有一天飞行车的电路板突然出现了故障,导致无法启动。 电路板的整体…

保姆级 Keras 实现 YOLO v3 二

保姆级 Keras 实现 YOLO v3 二 一. 数据准备二. 从 xml 或者 json 文件中读出标注信息三. K-Means 计算 anchor box 聚类尺寸读出所有标注框尺寸K-Means 聚类 四. 代码下载 上一篇 文章中, 我们完成了 YOLO v3 的网络定义, 相当于完成了前向计算功能, 但此时网络中的参数处于随…

MySQL数据库 函数

目录 函数概述 字符串函数 数值函数 日期函数 流程函数 函数概述 函数是指一段可以直接被另一段程序调用的程序或代码。也就意味着,这一段程序或代码在MysQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即…

前后端传参中遇见的问题

前后端传参经常容易出错,本文记录开发springBootMybatis-plusvuecli项目中出现的传参问题及解决办法 1.前后端没有跨域配置,报错 解决方法:后端进行跨域配置,拷贝CorsConfig类 package com.example.xxxx.config;import org.spr…

k8s-ingress 8

ExternalName类型 当集群外的资源往集群内迁移时,地址并不稳定,访问域名或者访问方式等会产生变化; 使用svc的方式来做可以保证不会改变:内部直接访问svc;外部会在dns上加上解析,以确保访问到外部地址。 …

2024年软件测试入坑指南,新人必看系列

本科非计算机专业,在深圳做了四年软件测试工作,从之前的一脸懵的点点点,到现在会点自动化测试,说一点点非计算机专业人员从事软件测试的心得体会,仅供参考交流。 如果你是非计算机专业,毕业不久&#xff0…

CMOS电源稳压器LDO

一、基本概述 TX6213是一款300mA Low Power LDO,输入电压2.5V~6.5V,输出范围1.0V~3.3V,输出电流300mA,PSRR为75dB 1KHz,压差为220mV IOUT200mA。 二、应用场景 MP3/MP4 Players Cellphones, radiophone, digital ca…

智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.适应度相关算法4.实验参数设定5.算法…

C++设计模式-Builder 构建器

通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。 一、动机 在软件系统中,有时候面临着“一个复…

Python:(Sentinel-1)如何解析SNAP输出的HDF5文件并输出为GeoTIFF?

博客已同步微信公众号:GIS茄子;若博客出现纰漏或有更多问题交流欢迎关注GIS茄子,或者邮箱联系(推荐-见主页). Python:(Sentinel-1)如何解析SNAP输出的HDF5文件并输出为GeoTIFF? 01 前言 最近…

MySQL安装——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

MySQLhttps://www.mysql.com/ 将下发的ds_db01.sql数据库文件放置mysql中 12、编写Scala代码,使用Spark将MySQL的ds_db01库中表user_info的全量数据抽取到Hive的ods库中表user_info。字段名称、类型不变,同时添加静态分区,分区字段为etl_da…

TCP单人聊天

TCP和UDP两种通信方式它们都有着自己的优点和缺点 这两种通讯方式不通的地方就是TCP是一对一通信 UDP是一对多的通信方式 TCP通信 TCP通信方式呢 主要的通讯方式是一对一的通讯方式,也有着优点和缺点 它的优点对比于UDP来说就是可靠一点 因为它的通讯方式是需…

谈谈你知道的设计模式?请手动实现单例模式 , Spring 等框架中使用了哪些模式?

文章目录 谈谈你知道的设计模式请手动实现单例模式Spring等框架中使用哪些设计模式?设计模式分类 谈谈你知道的设计模式 我们知道 InputStream 是一个抽象类,标准类库中提供了 FileInputStream、ByteArrayInputStream 等各种不同的子类,分别…

8款AI写作神器,轻松创作高质量内容

随着AI技术的不断发展,AI生成文案平台也逐渐成为一种新型的写作工具。这些平台利用先进的算法和自然语言处理技术,能够快速生成高质量的文案内容。不仅可以提高写作效率,还可以帮助创作者更好地表达思想和创意。AIGCer介绍几款好用的AI写作工…

什么?Figma 的 fig 文件格式居然被破解出来了

大家好,我是前端西瓜哥。 上周图形编辑器交流群里有人问,对于 Figma 导出的 fig 文件,该如何解析其格式,拿到可读数据。 经过群友的一番讨论,这个问题最后算是解决了。 fig 文件 导出 Figma 的设计文件&#xff0c…

智能优化算法应用:基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于人工电场算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工电场算法4.实验参数设定5.算法结果6.…

产品调研——AI平台

本文主要记录了对腾讯云-TIONE平台、华为云-ModelArt等主流AI平台的产品调研。 交互式建模 简单点说就是提供了带训练资源的云IDE,使用形态包括Notebook、VsCode等。 腾讯云-TI平台 TI平台将tensorflow、pytorch、spark环境等均集成到一个Notebook容器中&#xf…

深入理解强化学习——马尔可夫决策过程:价值迭代-[价值迭代算法]

分类目录:《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程:价值迭代-[最优性原理]》和文章《深入理解强化学习——马尔可夫决策过程:价值迭代-[确认性价值迭代]》介绍了价值迭代的基础知识,本文将介绍价值…

AX7A200教程(9): ov5640摄像头输出显示720p视频

一,功能框图 ov5640摄像头视频通过ddr3缓存后,最后使用hdmi接口进行输出显示 二,摄像头硬件说明 2.1,像头硬件管脚 如下图所示,一共18个管脚 2.2,摄像头电源初始化时序 因这个ov5640摄像头是买的老摄像…