当前位置: 首页 > news >正文

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

相关文章:

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

目录 引言 Redis 特性 内存中存储数据 可编程性 可扩展性 持久化 支持集群 高可用性 Redis 优势 Redis 用作数据库 Redis 相较于 MySQL 优势 Redis 相较于 MySQL 劣势 Redis 用作缓存 典型场景 Redis 存储 session 信息 Redis 用作消息队列 初心 消息队列的…...

智能优化算法应用:基于社会群体算法3D无线传感器网络(WSN)覆盖优化 - 附代码

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

Kotlin 笔记 -- Kotlin 语言特性的理解(二)

都是编译成字节码,为什么 Kotlin 能支持 Java 中没有的特性? kotlin 有哪些 Java 中没有的特性: 类型推断、可变性、可空性自动拆装箱、泛型数组高阶函数、DSL顶层函数、扩展函数、内联函数伴生对象、数据类、密封类、单例类接口代理、inter…...

数据结构【1】:数组专题

一、定义 数组是编程中一种强大的数据结构,它允许您存储和操作相同类型元素的集合。在 Python 中,数组是通过数组模块创建的,该模块提供了一个简单的接口来创建、操作和处理数组。 二、创建数组 在 Python 中,可以使用内置的 a…...

【Spring】Spring 事务

Spring 事务 文章目录 Spring 事务1. 简介2. Spring事务管理器3. 基本使用4. 属性剖析5. 声明式事务问题场景5.1 事务不生效5.2 事务不回滚5.3 大事务问题 6. 编程式事务 1. 简介 编程式事务:指手动编写程序来管理事务,即通过编写代码的方式直接控制事务…...

Ubuntu 虚拟机环境,编译AOSP源码

环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…...

2023.12.18杂记

今天特地搜了一下国内不错的博客网站,本来想在掘金上写的,但是怕被人喷(,所以还是决定在csdn上写了哈哈哈。 这篇文章主要整理一下我今天写代码时遇到的疑惑以及记录一下思考过程吧。 第一个注意的地方,我们的get查询…...

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

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

K8s内容器拓扑图工具

1.背景:随着线上容器越来越多,需要一个可视化的方式展示各个容器之间的拓扑图。 2.需求:轻量级,部署方便。 3.部署 helm repo add groundcover https://helm.groundcover.com/ helm repo update helm install caretta --namespa…...

掌握 Babel:让你的 JavaScript 与时俱进(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...

Mysql进阶-InnoDB引擎事务原理及MVCC

事务原理 事务基础 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务的四大特性: 原子性(A…...

「X」Embedding in NLP|神经网络和语言模型 Embedding 向量入门

在「X」Embedding in NLP 进阶系列中,我们介绍了自然语言处理的基础知识——自然语言中的 Token、N-gram 和词袋语言模型。今天,我们将继续和大家一起“修炼”,深入探讨神经网络语言模型,特别是循环神经网络,并简要了解…...

JVM-11-运行时栈帧结构

“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual MachineStack)的栈元素。 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回…...

【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! X的平方根 class Soluti…...

【大麦小米学量化】使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码)

文章目录 前言一、逆回购是什么?1. 什么是逆回购?2. 最低参与金额是多少?3. 逆回购交易是否安全?4. 逆回购交易适合什么类型的客户? 二、讯投XtQuant是什么?1. XtQuant运行依赖环境2. XtQuant运行逻辑 三、…...

php hyperf 读取redis,存储到数据库

背景说明 小白:伟哥,java中的set是无序的,Redis中可以带顺序吗? 伟哥:可以, 不过不叫set了,叫zset。 概述 SortedSet又叫zset,它是Redis提供的特殊数据类型,是一种特殊…...

云原生之深入解析K8S 1.27新特性如何简化状态服务跨集群平滑迁移

一、背景 Kubernetes v1.26 为 StatefulSet 引入了一个新的 Alpha 级别特性,可以控制 Pod 副本的序号。从 Kubernetes v1.27 开始,此特性进级到 Beta 阶段。序数可以从任意非负数开始, 那么该如何使用此功能呢?StatefulSet 序号为…...

鸿蒙OS:打破界限的操作系统新星

导言 鸿蒙OS(HarmonyOS)是华为公司为应对技术封锁而推出的分布式操作系统,其背后蕴含着华为构建全球数字生活愿景的雄心。本文将深入剖析鸿蒙OS的起源、核心特性,并展望其未来在数字生态中的角色。 1. 背景与起源 华为的…...

预测性维护在汽车制造行业中的应用

汽车制造行业是一个高度复杂和精细化的领域,依赖于各种设备来完成生产流程。这些设备包括机械装配线、焊接机器人、喷涂设备、传送带等。然而,这些设备在长时间运行中不可避免地会遇到各种故障,给生产进程带来延误和成本增加。为了应对这一挑…...

分布式链路追踪 —— 基于Dubbo的traceId追踪传递

文章目录 原文链接RpcContext 上下文对象Dubbo 过滤器(Filter)对象基于Dubbo的traceId追踪传递实现 原文链接 RpcContext 上下文对象 在实现 Dubbo 调用之间的链路跟踪之前,先简单了解 RpcContext 上下文对象和 Filter 过滤器对象&#xff…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...