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

news2024/11/22 19:45:09

目录

引言

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.coloradmin.cn/o/1322028.html

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

相关文章

谷歌手机安装证书到根目录

1、前提你已经root,安装好面具 2,下载movecert模块,自动帮你把证书从用户证书移动成系统证书 视频教程,手机为谷歌手机 https://www.bilibili.com/video/BV1pG4y1A7Cj?p11&vd_source9c0a32b00d6d59fecae05b4133f22f06 软件下…

众和策略:短线交易看什么?短线交易看什么指标?

短线交易看什么? 1、k线 当k线出现黄昏十字星、黑乌鸦、乌云盖顶等卖出形状图时,是一种卖出信号,当k线出现早晨十字星、红三兵、等买入形状图时,是一种买入信号。 2、均线 当均线出现死叉、空头摆放时是一种卖出信号&#xff…

商城免 费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

【saas云平台】打造全行业全渠道全场景的saas产品,为经营场景提供一体化解决方案;门店经营区域化、网店经营一体化,本地化、全方位、一站式服务,为多门店提供统一运营解决方案;提供丰富多样的营销玩法覆盖所有经营场景…

SpringIOC之ScopeMetadata

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

《服务器之间的图片传输 2023-12-19》模拟一台服务器(client)给另外一台服务(server)传输图片

Server public class PictureTestServer {public static void main(String[] args) {try (ServerSocket serverSocket new ServerSocket(0)) {System.out.println("服务器已启动,监听端口: " serverSocket.getLocalPort());Socket socket serverSocke…

Three.js中文网14入门案例

Three.js中文网 <template><div id"webgl"></div> </template><script setup> import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;// 创建3D场景对象Scene const scene new TH…

ansible远程操作主机功能(1)

自动化运维&#xff08;playbook剧本yaml&#xff09; 是基于Python开发的配置管理和应用部署工具。自动化运维中&#xff0c;现在是异军突起。 Ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c;类似于Xshell的一键输入的工具&#xff0c;不需要每次…

playwright进阶问题,with sync_playwright() as p中的p是什么类型您知道吗?

playwritght中with as的用法 最近在看playwritght 的源码&#xff0c;大家都知道运行playwright的基础代码如下&#xff1a; with sync_playwright() as p:browser p.chromium.launch(channel"chrome", headlessFalse)page browser.new_page()page.goto("ht…

国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)

ToolBench项目可以理解为一个能直接提供训练ToolLLM的平台&#xff0c;该平台同时构建了ToolLLM的一个开源训练指令集。&#xff0c;该项目是OpenBMB机构&#xff08;面壁智能与清华NLP联合成立&#xff09;旗下的一款产品&#xff0c;OpenBMB机构名下还同时拥有另外一款明星产…

JAVA编程题-交通工具信息查询系统

题目&#xff1a; 请编写一个交通工具信息查询系统&#xff0c;其中包含一个抽象父类&#xff1a;交通工具&#xff08;Transports&#xff09;类&#xff0c;四个具体子类飞机&#xff08;Plane&#xff09;类&#xff0c;轮船&#xff08;Ship&#xff09;类&#xff0c;火车…

结构体基础例题

这里写目录标题 例题一例题解析答案 例题二例题解析答案 例题三例题解析答案 例题四例题解析答案 例题五例题解析及答案 例题六例题解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978…

手机数码品牌网站建设的作用是什么

手机数码产品几乎已经成为成年人必备的&#xff0c;包括手机、电脑、摄像机、键盘配件等&#xff0c;同时市场中相关企业也非常多&#xff0c;消费者可供选择的商品类型也很多样&#xff0c;而对企业来讲&#xff0c;只有不断提升品牌形象、获客拉新等才能不断提升企业地位&…

亚信安慧AntDB数据库成功助力通信业务核心转型

账务数据库扮演着通信运营商业务支撑系统的核心角色&#xff0c;负责处理亿万用户资料同步、充值缴费和账务记录等重要任务。在5G建设逐渐普及的趋势下&#xff0c;5G业务规模也逐步扩大。面对5G业务的新特点&#xff0c;账务系统对数据库的高并发和高可用性提出了更高的要求。…

Ubuntu系统使用Nginx搭建RTMP服务器

环境&#xff1a; 推流端 rockpi s 主控rk3308 运行ubuntu系统 服务端 ubuntu 播放器 VLC播放器 服务端安装依赖&#xff1a; apt-get install build-essential libpcre3 libpcre3-dev libssl-dev创建nginx编译目录&#xff1a; mkdir my_nginx_rtmp cd my_nginx_rtmp/下载 …

亚马逊,速卖通,shein卖家如何准确有效的测评补单

一、合理规划测评时间和数量 卖家需要合理规划测评的时间和数量。如果卖家过于频繁地进行测评&#xff0c;或者在短时间内进行大量的测评&#xff0c;这可能会被视为恶意行为&#xff0c;从而触犯风控机制。因此&#xff0c;卖家需要根据自己的销售情况和市场需求&#xff0c;…

【机器学习】卷积神经网络(CNN)的特征数计算

文章目录 基本步骤示例图解过程 基本步骤 在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;计算最后的特征数通常涉及到以下步骤&#xff1a; 确定输入尺寸&#xff1a; 首先&#xff0c;你需要知道输入数据的尺寸。对于图像数据&#xff0c;这通常是 (batch_size, c…

ST股票预测模型(机器学习_人工智能)

知己知彼&#xff0c;百战不殆&#xff1b;不知彼而知己&#xff0c;一胜一负&#xff1b;不知彼&#xff0c;不知己&#xff0c;每战必贻。--《孙子兵法》谋攻篇 ST股票 ST股票是指因连续两年净利润为负而被暂停上市的股票&#xff0c;其风险较高&#xff0c;投资者需要谨慎…

域架构下的功能安全思考

来源&#xff1a;联合电子 随着整车电子电气架构的发展&#xff0c;功能域控架构向整车集中式区域控制演进。新的区域控制架构下&#xff0c;车身控制模块(BCM)&#xff0c;整车控制单元&#xff08;VCU&#xff09;&#xff0c;热管理系统&#xff08;TMS&#xff09;和动力底…

JDK各个版本特性讲解-JDK14特性

JDK各个版本特性讲解-JDK14特性 一、Java14概述二、语法层面的变化1. instanceof2. switch表达式3. 文本块的改进4. Records记录类型 二、关于GC1.G1的NUMA内存分配优化2. 弃用SerialCMS,ParNewSerial Old3.删除CMS4.ZGC on macOS and Windows 三、其他变化1.友好的空指针异常提…

利用python在abaqus中画Voronoi多面体简单示例

利用python在abaqus中画Voronoi多面体简单示例 利用scipy.spatial库得到Voronoi多面体顶点坐标abaqus中绘制多面体CAE操作得到相应rpy文件0、 将vertices.csv和ridge_vertices.csv导入abaqus1、 新建一个part2、创建点3、画线4、画面 完整代码 利用scipy.spatial库得到Voronoi多…