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

【redis】redis的特性和主要应用场景

文章目录

  • redis 的特性
    • 在内存中存储数据
    • 可编程的
    • 扩展能力
    • 持久化
    • 集群
    • 高可用
  • redis 的应用场景
    • 实时数据存储
    • 缓存
    • 消息队列

redis 的特性

redis 的一些特性(优点)成就了它

在内存中存储数据

  • In-memory data structures

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

  • key 都是 String
  • value 则可以是这些数据结构(stringhasheslistssetssorted setsstreams,and more)

可编程的

  • Programmability
    针对 Redis 的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)
  • 主要是使用 Lua 语言

扩展能力

  • Extensibility
    可以在 Redis 原有的功能基础上,再进行扩展。Redis 提供了一组 API,可以通过 CC++Rust 这几个语言编写 Redis 扩展(本质上就是第一个动态链接库)
  • Windows 上的 .dll(动态链接库),里面包含很多的函数和代码,去给 exe 调用
  • LInux 上的动态库是 .so,虽然和 dll 格式不同,但本质是一样的

这个特性可以让我们自己去扩展 Redis 的功能。比如,Redis 自身已经提供了很多的数据结构和命名,通过扩展,让 Redis 支持更多的数据结构以及支持更多的命令

持久化

  • Persistence
    Redis 是把数据存储在内存上的,为了能更快速地访问。但内存上的数据是“易失的“(当进程退出/系统重启,数据就会丢失)

Redis 会把数据存储在硬盘上,内存为主,硬盘为辅(硬盘相当于对内存的数据备份了一下)。如果 Redis 重启了,就会在重启的时候加载硬盘中的备份数据,使 Redis 的内存回复到启动前的状态

集群

  • Clustering
    Redis 作为一个分布式系统的中间件,能够支持集群是很关键的

一个 Redis 能存储的数据是有限的(内存空间有限)。如果要存储更多的数据,就可以引入多个主机,部署多个 Redis 节点,每个 Redis 存储数据的一部分

高可用

  • High availability

核心就是“冗余/备份
Redis 自身也使支持“主从”结构,从节点就相当于主节点的备份,当主节点挂了,从节点就能顶上去,代替主节点。这样就能保证系统可用性是很高的。当主节点挂了用户也感知不到,因为在这挂的一瞬间,从节点就顶上去了

天下武功,唯快不破!但为什么 Redis 快?

  1. Redis 数据在内存中,就比访问硬盘的数据库速度要快很多

  2. Redis 核心功能都是比较简单的逻辑,功能都是比较简单的操作内存的数据结构

  3. 从网络角度上,Redis 使用了 IO多路复用 的方式(epoll
    IO多路复用 就是使用一个线程,管理多个 Socket。这样就可以在系统资源开销比较小的情况下,可以比较高效的处理比较高的并发量

  4. Redis 使用的是单线程模型(虽然更高版本的 Redis 引入了多线程)
    这样的单线程模型,减少了不必要的线程之间的竞争开销
    多线程提高效率的前提是:这是一个 CPU 密集型的任务,使用多个线程可以充分的利用多核资源。但是对于 Redis 来说,它的主要核心任务主要就是操作内存的数据结构,不会吃很多 CPU

redis 的应用场景

实时数据存储

  • Real-time data store
    Redis 当做了数据库,按照键值对存储数据。(低延迟、高吞吐情况)存的是全量数据,这里的数据不能随便丢
    大多数情况下,考虑到数据存储,优先考虑的是“”,但是仍然有一些场景,考虑的是“

缓存

  • Caching
    使用 MySQL 来存储数据,大、慢。使用二八原则,把热点数据拎出来,存储在 redis 中,把其他数据还是放在 MySQL
    redis 里面存的是部分数据,全量数据都是以 MySQL 为主的,哪怕 redis 里面的数据没有了,还可以从 MySQL 中再加载回来

  • session storage
    cookie 实现用户身份信息的保存,需要 session 配合
  • session 在服务器这里真正的存储了用户数据
  • cookie 只是在浏览器里存储了一个用户的身份标识(sessionId
    之前 session 是存储在应用服务器上的,但现在变成了分布式系统,引入了负载均衡

image.png|405
第一次客户端发出请求,负载均衡器将请求传到应用服务器 A,进行登录操作。登录成功之后,应用服务器就会生成当前用户的会话
但下次这个用户再次访问的时候,负载均衡器就可能将请求传到应用服务器 B,而这个应用服务器又没有这个用户上次进行访问产生的相关会话,难倒要再登录一次吗?
如何解决上述问题?

  1. 想办法让负载均衡器,把同一个用户的请求始终打到同一个机器上(不能轮询了,要通过 userId 之类的方式来分配机器)

  2. 把会话数据单独拎出来,放到一组独立的机器上存储image.png|447

  • 可以让应用服务器存到 redis 中,之后每一个应用服务器在读取会话或者写入会话的时候,都去访问这个 redis
  • 之后不管用户的请求打到那个应用服务器上,始终我们都是从 redis 中拿到会话,这样就能保证无论访问到哪台应用服务器上,会话数据都能被完整的拿到。
  • 万一应用程序重启了,会话也不会丢失

消息队列

  • Streaming & messaging
    此处说到的消息队列,是一个消息队列服务器。它是一个单独的服务器,起到消息队列的功能。基于这个服务器,我们就能实现一个网络版本的“生产者-消费者模型
    对分布式系统来说,服务器和服务器之间,有时候也需要使用到生产者消费者模型,因为有优势:
  1. 解耦合
  2. 削峰填谷
    业界也有很多知名的消息队列,RabbitMQ、Kafka、RocketMQ… redis 也是提供了消息队列的功能的,但一般不怎么使用。如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖,redis 可以作为一个选择

相关文章:

【redis】redis的特性和主要应用场景

文章目录 redis 的特性在内存中存储数据可编程的扩展能力持久化集群高可用快 redis 的应用场景实时数据存储缓存消息队列 redis 的特性 redis 的一些特性(优点)成就了它 在内存中存储数据 In-memory data structures MySQL 主要是通过“表”的方式来…...

部署后端WebSocket服务到AWS云服务器

目录 1.创建AWS账户2.选择EC2实例3.配置EC2实例4.使用VSCode连接到EC2实例5.部署WebSocket服务6.配置域名和SSL(可选)7.监控和维护 1.创建AWS账户 如果你还没有AWS账户,你需要先在AWS官网注册一个。 2.选择EC2实例 登录到AWS管理控制台。搜…...

常见的集合

1、Collection 单列集合的根接口 遍历方法 Collection<String> c new ArrayList<>(); c.add("赵敏"); c.add("小昭"); c.add("素素"); c.add("灭绝"); System.out.println(c); //[赵敏, 小昭, 素素, 灭绝]//1、迭代器遍…...

Swift知识点---RxSwift学习

1. 什么是RxSwift RxSwift是Swift函数响应式编程的一个开源库&#xff0c;由Github的ReactiveX组织开发、维护 RxSwift的目的是&#xff1a;让数据/事件流 和 异步任务能够更方便的序列化处理&#xff0c;能够使用Swift进行响应式编程 RxSwift本质上还是观察者模式&#xff…...

驾驭不断发展的人工智能世界

从很多方面来看&#xff0c;历史似乎正在重演。许多企业正争相采用生成式人工智能 (Gen AI)&#xff0c;就像它们争相采用云计算一样&#xff0c;原因也是一样的&#xff1a;效率、成本节约和竞争优势。 然而&#xff0c;与云一样&#xff0c;GenAI 仍是一项发展中的技术&…...

冒泡排序——基于Java的实现

简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;适用于小规模数据集。其基本思想是通过重复遍历待排序的数组&#xff0c;比较相邻的元素并交换它们的位置&#xff0c;以此将较大的元素逐步“冒泡”到数组的末尾。算法的名称源于其运行过程…...

Mendix 创客访谈录|Mendix赋能汽车零部件行业:重塑架构,加速实践与数字化转型

在当前快速发展的技术时代&#xff0c;汽车行业正经历着前所未有的数字化转型。全球领先的汽车零配件制造商面临着如何利用最新的数字技术优化其制造车间管理的挑战。从设备主数据管理到生产执行工单管理&#xff0c;再到实时监控产量及能耗&#xff0c;需要一个灵活、快速且高…...

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型

船舶机械设备5G智能工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。在当今数字化浪潮推动下&#xff0c;船舶制造业正经历着前所未有的变革。为了应对市场的快速变化&#xff0c;提升生产效率&#xff0c;降低成本&#xff0c;并增强国际竞争力&#xff0c;船舶机械设…...

什么是jsonp请求

JSONP&#xff08;JSON with Padding&#xff09;是一种解决跨域请求问题的技术。它允许网页从不同的域名请求数据&#xff0c;而不受同源策略的限制。JSONP 通过动态创建 script 标签来实现跨域请求&#xff0c;因为 script 标签不受同源策略的限制。 一、工作原理 客户端&a…...

【C++】STL容器详解【上】

目录 一、STL基本概念 二、STL的六大组件 三、string容器常用操作 3.1 string 容器的基本概念 3.2 string 容器常用操作 3.2.1 string 构造函数 3.2.2 string基本赋值操作 3.2.3 string存取字符操作 3.2.4 string拼接字符操作 3.2.5 string查找和替换 3.2.6 string比…...

助贷行业的三大严峻挑战:贷款中介公司转型债务重组业务

大家是否察觉到一种趋势&#xff1f;现如今&#xff0c;众多贷款辅助服务机构与专注于债务再构的公司之间形成了紧密的“联动”。有的选择将获取的贷款需求转介给债务重组方&#xff0c;有的则直接下场&#xff0c;动用自身资本参与债务重组业务。这一现象背后&#xff0c;究竟…...

力扣第42题 接雨水

前言 记录一下刷题历程 力扣第42题 接雨水 接雨水 原题目&#xff1a;给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…...

轻松录制每一刻:探索2024年免费高清录屏应用

你不会还在用一些社交工具来录屏吧&#xff1f;现在的市面上有不少免费录屏的软件了。别看如软件是免费的&#xff0c;它的功能比起社交工具的录屏功能来说全面的多。这次我就分享几款我用过的录屏工具。 1.福晰录屏大师 链接直达&#xff1a;https://www.foxitsoftware.cn/R…...

【小沐学OpenGL】Ubuntu环境下glfw的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glfw简介 2、安装glfw2.1 直接命令二进制安装2.2 源码安装 3、测试glfw3.1 测试1&#xff0c;glfwglew3.2 测试2&#xff0c;glfwglad3.3 测试3 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业标准&#xff0c;其仅仅定义了一组2D和…...

[数据集][目标检测]汽油检泄漏检测数据集VOC+YOLO格式237张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;237 标注数量(xml文件个数)&#xff1a;237 标注数量(txt文件个数)&#xff1a;237 标注类别…...

图文解析保姆级教程:Postman专业接口测试工具的安装和基本使用

文章目录 1. 引入2. 介绍3. 安装4. 使用 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记16——请求&#xff08;postman、简单参数、实体参数、RequestParam映射&#xff09;想要详细了解更多有关请求各种参数介绍的知识可以移步此篇笔记。 1. 引入 在当前最为主流的开…...

jenkins配置流水线

新建任务&#xff0c;随便选一个名字&#xff0c;选中流水线 配置git的用户名和密码&#xff0c;记录ID&#xff0c;后面配置流水线的时候用。 pipeline {agent anystages {stage(stop app){steps {script {def remote [:]//配置服务地址&#xff0c;用户名和密码remote.na…...

SQL 编程基础

SQL&#xff08;结构化查询语言&#xff09;广泛应用于数据库操作&#xff0c;是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门&#xff0c;了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言&#xff0c;结合实际示例&#xff0c;帮助你轻松理…...

sql 中名字 不可以 包含 mysql中 具有 特定意义 的单词

这种sql执行不报错 这种sql执行报错 所以sql中名字不可以使用mysql中具有特定意义的单词 以此文章作为警告&#xff0c;我下次起名字不可以使用 mysql中具有特殊意义的字符 就因为这个导致我搞了一个多小时&#xff0c;急死我了&#xff0c;周五就要前后端联调了。下次千万不…...

分布式部署①

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 1. 需要部署的服务 Nacos 理论上,应…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...