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 等
  • 这些中间件提供了更丰富的功能和更强大的扩展性,适用于更复杂的消息处理场景!

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

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

相关文章

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

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

构建高效统一的音视频联动融合通信调度平台

在信息技术日益高度发展的今天,越来越多的企业或者组织机构重视如何提高内外部的工作效率,但由于传统的通信方式如电话、邮件、短信、传真等方式无法满足企业高效、快速的沟通要求,因此需要一个可以将各种通信方式结合在一起的通信系统来满足…

驭见大模型 智领新征程丨泰迪智能科技荣登2023年度广东省人工智能应用项目风云榜

12月15日,由广东省科学技术厅、广东省工业和信息化厅、广东省人力资源和社会保障厅、广东省政务服务数据管理局、广东省科学技术协会指导,广东省人工智能产业协会主办的2023年粤港澳大湾区人工智能产业大会正式举办,大会以“驭见大模型、智领…

PTFE四氟托盘应用于化工、医药、食品行业

PTFE托盘是一种广泛应用于化工、医药、食品等行业的特种托盘,采用聚四氟乙烯(PTFE)材料制造而成。PTFE是一种具有出色耐腐蚀性、高温稳定性和优异物理特性的材料。 PTFE托盘在化工领域中被广泛应用,主要用于处理腐蚀性的化学物质。…

【leetcode876】链表的中间结点Java代码讲解

12.19 链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点&a…

工作纪实38-排查cpu彪高

昨天晚上上线了一个服务,第二天发现CPU持续飙高到70~90%,触发平台的自动扩容,后定位出问题后降低到3% 怀疑部分代码使用的线程在持续工作没有释放(死循环)进入机器,使用top -H 找出系统中使用C…

接口自动化测试难点:数据库验证解决方案

接口自动化中的数据库验证:确保数据的一致性和准确性 接口自动化测试是现代软件开发中不可或缺的一环,而数据库验证则是确保接口返回数据与数据库中的数据一致性的重要步骤。本文将介绍接口自动化中的数据库验证的原理、步骤以及示例代码,帮…

机器学习 | 贝叶斯方法

不同于KNN最近邻算法的空间思维,线性算法的线性思维,决策树算法的树状思维,神经网络的网状思维,SVM的升维思维。 贝叶斯方法强调的是 先后的因果思维。 监督式模型分为判别式模型和生成式模型。 判别模型和生成模型的区别&#xf…

【LeetCode刷题-树】--257.二叉树的所有路径

257.二叉树的所有路径 方法:深度优先搜索 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, T…

win环境下启动kafka Port already in use: 6688; nested exception is

背景 zk启动成功后,接下来启动kafka,再启动kafka后一直说端口被占用。 端口占用解决办法: netstat -aon|findstr 9092 taskkill -f -pid 7780 杀掉后,再次启动kafka时,问题并未解决 后来修改了批处理文件kafka-run-class.bat中…

深度剖析知识图谱:方法、工具与实战案例

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 知识图谱作为一种强大的知识表示和关联技术&am…

SAP 特殊采购类80简介

前面我们已经测试特殊采购类40、70,我们今天测试一下特殊采购类80。 特殊采购类80:在替代工厂生产,在成品层维护特殊采购类,需求和收货在计划工厂完成,成品生产和组件采购在生产工厂完成。 80采购类也是我们在SAP系统中实现跨工厂需求传递的一种方式。它具有传递方式简单、…

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库,也是最常用的Python GUI库之一,提供了丰富的组件和功能,包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等,方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…

Sui限定版冬季任务来袭,100万份礼物和50万SUI在等你!

在这个渐趋寒冷但节日氛围却日渐浓厚的冬日,Mysten Labs非常高兴地向大家宣布,限定版冬季任务已于北京时间12月19日凌晨3点正式启动啦!这次冒险任务充满刺激,奖励丰厚,快来Mysten Labs任务网站体验吧! 对于…

查看git的帮助信息

说明 在cmd窗口、或者git Bash shell下执行git --help或者git -h命令&#xff0c;可以查看git的帮助信息。 执行git <command> --help命令可以查看某个命令的帮助信息&#xff0c;其中<command>表示某个具体的命令。 示例1&#xff1a;在git Bash shell下运行git…

Linux文本三剑客grep练习

1、显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行&#xff1b; [rootshell ~]# grep "^[hH]" /etc/rc.d/rc.rc.sysinit [rootshell ~]# grep -i "h" /etc/rc.d/rc.sysinit 2、显示/etc/passwd中以sh结尾的行; [rootshell ~]# grep "sh$&quo…

windows10 固定电脑IP地址操作说明

windows10 固定电脑IP地址操作说明 一、无线网络的IP地址设置方法二、有线网络的IP地址设置方法 本文主要介绍&#xff0c;windows10操作系统下&#xff0c;不同的网络类型&#xff0c;对应的电脑IP地址设置方法。 一、无线网络的IP地址设置方法 在桌面右下角&#xff0c;点击…

A01、深入了解性能优化

1、常用性能评价/测试指标 1.1、响应时间 提交请求和返回该请求的响应时间之间使用的时间&#xff0c;一般比较关注平均响应时间。常用操作的响应时间列表&#xff1a; 操作响应时间打开一个站点几秒数据库查询一条记录&#xff08;有索引&#xff09;十几毫秒机械磁盘一次寻…

2023年超声波清洗机实测!清洁力强的超声波清洗机到底如何选择?

超声波清洗机对眼镜党来说是再熟悉不过的一款清洁设备&#xff0c;每次眼镜只要脏了就会第一时间想到拿去眼镜店去清洗&#xff0c;眼镜店老板数分钟就给自己解决了&#xff0c;不需要自己动手去清洗。随着科技的发展&#xff0c;超声波清洗机已经开始慢慢衍生到家里也能看到它…

vs code(Visual Studio Code)使用Remote SSH插件连接不上,反复输入密码

使用Remote SSH插件连接不上&#xff0c;反复输入密码问题解决分为两步 1&#xff0c;点击此处 可以得到配置文件的存放目录&#xff0c;进入硬盘这个目录 打开这个文件&#xff0c;知道你服务器的所在行ip&#xff0c;整行删掉&#xff0c;尝试再次连接 2&#xff0c;如果1不…