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

2023.9.6 Redis 的基本介绍

目录

 Redis 的介绍

Redis 用作缓存和存储 session 信息

Redis 用作数据库

消息队列

消息队列是什么?

Redis 用作消息队列


 Redis 的介绍

特点:

  • 内存中存储数据:奠定了 Redis 进行访问和存储时的快
  • 可编程性:支持使用 Lua 编写脚本,这些脚本可以在 Redis 服务器端执行。通过脚本,可以实现复杂的数据操作和逻辑,比如批量操作、事务、原子性操作等
  • 可扩展性:Redis 原有的功能基础上通过 C、C++、Rust 这些语言编写 Redis 扩展,Redis自身已经提供很多数据结构和命令,可通过扩展让 Redis 支持更多数据结构和命令
  • 持久化:在内存中存储数据可能因为进程退出或系统重启导致数据的丢失,但Redis以内存为主、硬盘为辅,硬盘对数据进行备份,Redis 重启则会重新加载硬盘中备份数据到内存上,从而保证持久化
  • 支持集群:Redis 提供了一种分布式架构,允许将数据分布在多个节点上,以实现数据的水平扩展和高可用性。一个 Redis 的所能存储的数据空间是有限的,引入多个主机,部署多个 Redis 节点,对数据进行分散存储,扩大存储空间
  • 高可用性:Redis 支持主从结构,从节点相当于主节点的备份,当哪一个节点故障时,Redis 集群可以自动进行故障转移,将一个从节点提升为新的主节点,以保持服务的可用性。故障转移过程中,集群会重新分配数据槽,并重新配置主从关系

基本解释:

相较于单机程序直接通过变量在内存中存储数据,当我们想在分布式系统中让多个服务器共享同一份数据又想让数据存储在内存中,Redis 便是一个很好的选择!

具体解释:

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


设计初心:

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

Redis 用作缓存和存储 session 信息

在 Web 应用程序中,session 用于跟踪和存储用户的会话状态信息!


传统做法:

  • 将 session 信息存储在应用程序的内存中,但是当进行分布式部署应用程序时便会存在问题,当用户再次发起登录请求时,负载均衡器应该去哪台服务器上寻找用户之前登录的 session 信息
  • 当然我们可用通过 userId 来进行服务器的分配,每个 userId 绑定一个服务器,从而该用户的所有请求将访问同一台服务器,。但是一旦程序重启,便会丢失会话!


Redis 缓存做法:

  • 将所有 session 会话都存储到 Redis 上,让所有服务器从 Redis 中拿去相应的 session 信息,同时即使程序重启,由于 Redis 的持久性,会话也不会消失!

Redis 用作数据库

基本点:

  • 因为 Redis 是在内存中进行存储,所以其访问速度十分的快,相较于 MySQL 是在硬盘中进行存储,其访问速度是十分慢的。从而当在一些对性能要求很高的互联网产品中,Redis 也能被当作数据库进行使用!
  • Redis 与 MySQL 相比 其最大的劣势为存储空间有限,从而对于一些性能要求不高且需要较多存储空间的互联网产品,MySQL 还是作为首要选择!
  • 当然我们也可以将 Redis 和 MySQL 结合起来使用,从而达到存储空间又大且访问速度又快的需求。‘ 二八原则 ’ ——> 20% 的热点数据能满足 80% 的访问需求。从而我们可以将热点数据放到 Redis 中进行存储,以满足我们大部分的访问需求!但是我们还得承担相应的代价,其一是系统的复杂程度大大提高!,其二是当数据发生修改,还涉及到 Redis 和 MySQL 之间的数据同步问题!可利用该点将 Redis 用作缓存!

场景模拟:

存储用户访问量、点赞数量,我们选择使用 Redis 进行存储还是直接在内存中创建一个 Hashmap 存储呢?

  • 引入 Redis 进行存储会更慢,因为 redis 的存储 先通过网络再操作内存,而变量可直接在内存操作
  • 引入 Redis 可以保持数据持久化,同时也利于扩展为分布式系统


总结:

 我们可以根据互联网产品具体的情况进行分析和取舍,权衡利弊选择一个合适的存储方式!

消息队列

消息队列是什么?

基本解释:

  • 消息队列是一种通信模式,用于应用程序和系统组件之间传递消息,其提供了一种可靠的、异步的通信机制,使得不同的应用程序或系统之间能够解耦、可靠地交换数据

特点:

  • 异步通信:发送者和接收者之间是异步的,发送者不需要等待接收者处理消息即可执行后续操作
  • 解耦:发送者和接收者之间通过消息队列进行通信,互不直接依赖或了解对方存在,这种解耦使得系统组件能够独立地进行扩展
  • 可靠性:消息队列通常提供持久化机制,确保消息在接收过程中不会丢失,即使接收者当前不可用,消息也会在其重新上线后被接收
  • 削峰填谷:消息队列能够平衡系统的负载,当消息发送过快,队列可以缓冲消息并按照接收者的处理能力进行消费,从而防止系统过载
  • 顺序保证:有些消息队列支持按照特定的顺序发送和接收消息,确保消息按照发送的顺序被接收和处理

应用场景:

  • 分布式系统
  • 微服务框架
  • 异步处理
  • 任务调度
  • 日志处理
  • 事件驱动系统

Redis 用作消息队列

  • Redis由于其高性能和支持丰富的数据结构,它也被广泛用于构建轻量级的消息队列系统

利用方式:

  • 列表诗句结构:Redis 的列表(List)数据结构非常适合实现简单的消息队列。通过将消息作为元素插入到列表的头部或尾部,并使用 rpush(从尾部插入)和 lpop(从头部弹出)等操作,可以实现消息的入队和出队
  • 利用发布/订阅功能:Redis 的发布/订阅(Pub/Sub)功能可以用于实现更复杂的消息队列。发布者将消息发布到指定的频道,而订阅者可以订阅感兴趣的频道,以接收相应的消息。这种方式可以支持多个订阅者同时接收消息,并且允许发布者和订阅者之间解耦。但需要注意的是,Redis的发布/订阅功能是一种广播机制,即一个消息会被所有订阅了相应频道的订阅者接收到

总结:

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

相关文章:

2023.9.6 Redis 的基本介绍

目录 Redis 的介绍 Redis 用作缓存和存储 session 信息 Redis 用作数据库 消息队列 消息队列是什么? Redis 用作消息队列 Redis 的介绍 特点: 内存中存储数据:奠定了 Redis 进行访问和存储时的快可编程性:支持使用 Lua 编写脚…...

2023-09-08力扣每日一题

链接: 2651. 计算列车到站时间 题意: 不看日期只看时间 解: ? 实际代码: 还看!你怎么肥四?int findDelayedArrivalTime(int arrivalTime, int delayedTime) {return (arrivalTimedelayed…...

adb-linux 调试桥

这里写自定义目录标题 摘要:一、简介二、adb使用参考连接 摘要: adb 可替代网络、串口等调试手段,可以方便的进行文件传输、终端登录等 一、简介 ADB的全称为Android Debug Bridge,即调试桥,方便调试设备或调试开发…...

入门人工智能 —— 使用 Python 进行文件读写,并完成日志记录功能(4)

入门人工智能 —— 使用 Python 进行文件读写(4) 入门人工智能 —— 使用 Python 进行文件读写打开文件读取文件内容读取整个文件逐行读取文件内容读取所有行并存储为列表 写入文件内容关闭文件 日志记录功能核心代码:完整代码:运…...

使用Caffeine实现帖子的缓存来优化网站的运行速度

导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…...

Webpack5 搭建Vue项目(进阶版)

Webpack5 搭建Vue项目&#xff08;进阶版&#xff09; 提示&#xff1a;中间隔了好长时间&#xff0c;我胡汉三又回来继续更新了&#xff01;&#xff01;&#xff01;&#x1f602;&#x1f602;&#x1f602; 文章目录 Webpack5 搭建Vue项目&#xff08;进阶版&#xff09;前…...

论文阅读:Distortion-Free Wide-Angle Portraits on Camera Phones

论文阅读&#xff1a;Distortion-Free Wide-Angle Portraits on Camera Phones 今天介绍一篇谷歌 2019 年的论文&#xff0c;是关于广角畸变校正的。 Abstract 广角摄影&#xff0c;可以带来不一样的摄影体验&#xff0c;因为广角的 FOV 更大&#xff0c;所以能将更多的内容…...

力扣每日一题---207. 课程表

Problem: 207. 课程表 文章目录 解题方法复杂度Code 解题方法 y总的 Topsort 模板题 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) Code class Solution {int res 0; public…...

在Kubernetes环境中有关Nginx Ingress与API Gateway的连接问题

文章目录 小结问题解决参考 小结 在Kubernetes环境中是通过Nginx Ingress来从外部访问Kubernetes内部的环境&#xff0c;并用API Gateway来分发请求&#xff0c;碰到了 502 Bad gateway.的问题&#xff0c;并尝试解决。 问题 从外部通过Nginx Ingress访问Kubernetes内部的环…...

c语言练习44:深入理解strstr

深入理解strstr strstr作用展示&#xff1a; #include <stdio.h> #include <string.h> int main() {char str[] "This is a simple string";char* pch;pch strstr(str, "simple");/*strncpy(pch, "sample", 6);*/printf("%s…...

渗透测试漏洞原理之---【业务安全】

文章目录 1、业务安全概述1.1业务安全现状1.1.1、业务逻辑漏洞1.1.2、黑客攻击目标 2、业务安全测试2.1、业务安全测试流程2.1.1、测试准备2.1.2、业务调研2.1.3、业务建模2.1.4、业务流程梳理2.1.5、业务风险点识别2.1.6 开展测试2.1.7 撰写报告 3、业务安全经典场景3.1、业务…...

CentOS查看CPU、内存、网络流量和磁盘 I/O

安装 yum install -y sysstat sar -d 1 1 rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s rsec/s:…...

无人机航线规划

无人机航线规划&#xff0c;对于无人机的任务执行有着至关重要的作用&#xff0c;无人机在从起点飞向目的点的过程中&#xff0c;如何规划出一条安全路径&#xff0c;并且保证该路径代价最优&#xff0c;是无人机航线规划的主要目的。其中路径最优的含义是&#xff0c;在无人机…...

react中受控组件与非受控组件

受控组件与非受控组件 受控组件: 其值由 React 控制的组件,通常使用 state 来控制和修改组件的值。 例如受控的 组件: class NameForm extends React.Component {constructor(props) {super(props);this.state {value: };}handleChange (event) > {this.setState({val…...

【网络教程】如何解决Docker删除镜像和容器后磁盘空间未释放的问题

文章目录 问题分析解决方案删除未使用的容器删除未使用的镜像删除未使用的数据卷调整Docker数据存储路径问题分析 当删除Docker镜像和容器后,磁盘空间并未释放,这可能导致磁盘空间不足。造成此问题的原因包括: Docker镜像和容器的删除策略:默认情况下,Docker不会立即删除…...

Python中的进度条显示方案

迷途小书童 读完需要 3分钟 速读仅需 1 分钟 大家好&#xff0c;我是迷途小书童! tqdm 是一个非常常用的 Python 进度条库&#xff0c;它可以在循环迭代和 IO 操作期间添加一个进度条&#xff0c;直观地显示循环迭代的进程。 tqdm 是在 2013 年发布的&#xff0c;目的是为 Pyth…...

2023-09-05力扣每日一题

链接&#xff1a; 2605. 从两个数字数组里生成最小数字 题意&#xff1a; 两个数组都只包含1-9的数字&#xff0c;求一个最小数&#xff0c;两个数组内都要有它的其中一位 解&#xff1a; 要么是个位数要么是十位数&#xff0c;存一下数量和两边的最小数即可 实际代码&am…...

ODC现已开源:与开发者共创企业级的数据库协同开发工具

OceanBase 开发者中心&#xff08;OceanBase Developer Center&#xff0c;以下简称 ODC&#xff09;是一款开源的数据库开发和数据库管理协同工具&#xff0c;从首个版本上线距今已经发展了三年有余&#xff0c;ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…...

生成克隆钓鱼网站与对win7进行后渗透操作

目录 目录 前言 系列文章列表 思维导图 1&#xff0c;实验涉及复现环境 2&#xff0c;CS的介绍 2.1,CS的简介 2.2,CS的主要功能 3&#xff0c;CS的安装 3.1,将cobalt_strike_4.5文件夹放到kali中 3.1,放入过程中的注意事项 3.2,如图所示 4,配置工具 4.1,进入c…...

Ubuntu18中NVIDIA,cuda,cudnn,pytorch安装

注意&#xff1a;nvidia驱动和cuda,cudnn,pytroch,python的对应关系 linux安装pytorch&#xff08;包括cuda与cudnn&#xff09;_linux清华园按照pytorch1.12_BryceRui的博客-CSDN博客 安装流程&#xff1a;安装cuda&#xff08;包括nvidia驱动&#xff09; cudnn python安装…...

MATLAB中M文件编写

简介 所谓M文件就是将处理问题的各种命令融合到一个文件中&#xff0c;该文件以.m为扩展名。然后&#xff0c;由MATLAB系统编译M文件&#xff0c;得出相应的运行结果。M文件具有相当大的可开发性和扩展性。M文件有脚本文件和函数文件两种。脚本文件不需要输入参数&#xff0c;…...

企业数字化神经网络

随着数字化时代的到来&#xff0c;数据已经成为企业战略性资源和重要的生产要素。企业数字化转型的核心是充分开发和利用数据资源&#xff0c;以数据为驱动&#xff0c;对业务流程进行重构与创新&#xff0c;从而提升企业的核心竞争力。业务系统是企业数据资源的源头&#xff0…...

C++this指针

本文旨在讲解C中this关键字&#xff0c;以及其相关作用&#xff01; 定义 this 是 C 中的一个关键字&#xff0c;也是一个 const 指针&#xff0c;它指向当前对象&#xff0c;通过它可以访问当前对象的所有成员。 this的介绍 下面来看一下关于this这个关键字的实例&#xff0…...

【初阶C语言】操作符1--对二进制的操作

前言&#xff1a;本节内容介绍的操作符&#xff0c;操作的对象是二进制位。所以前面先介绍整数的二进制位 一、二进制位介绍 1.二进制介绍 &#xff08;1&#xff09;整数的二进制表示形式有三种&#xff1a;原码、反码和补码。 &#xff08;2&#xff09;原码、反码和补码的…...

安装pyscipopt

安装pyscipopt Conda会自动安装SCIP&#xff0c;因此所有内容都可以通过单个命令安装&#xff1a; GitHub - scipopt/PySCIPOpt: Python interface for the SCIP Optimization Suite conda create --name myenv python3.8 # 创建新环境 conda activate myenv # 激活新环境 …...

原生js实现的轮盘抽奖案例

来到大学也是有二年了&#xff0c;吃饭最多的地方就是在食堂&#xff0c;经过这么久的时间&#xff0c;已经几乎是把每个窗口的菜都吃腻了&#xff0c;所以我打算做个轮盘抽奖的形式来决定我每天要吃些什么。 目录 实现效果图&#xff1a; 静态搭建 js代码 1.实现此功能的思路…...

最经典的解析LSA数据库(第六课)

初步认识OSPF的大致内容(第三课)_IHOPEDREAM的博客-CSDN博客 1 OSPF 工作过程 建立领居表 同步数据库 今天来 说一说数据库概念 计算路由表 2 什么是数据库&#xff1f; 数据库是一个组织化的数据集合&#xff0c;用于存储、管理和检索数据。它是一个可访问的集合&#x…...

C++基础入门

文章目录 前言一、C历史及发展1.C是什么2.C历史 二、开始C1.基础类型1.第一个简单的C程序2.命名空间1.命名空间的介绍2.命名空间的使用3.命名空间的using声明与using指示 3.初识输入输出操作4.引用1.引用概念2.引用的使用1.引用做参数2.引用做返回值 3.引用和指针的区别4.const…...

【每日随笔】驾驭人性 ② ( 员工立场问题 | 立场转变 | 吴越同舟 | 老板如何与员工结成利益共同体 )

文章目录 一、员工立场问题二、立场转变三、吴越同舟四、老板如何与员工结成利益共同体 一、员工立场问题 人的潜力是很大的 , 肩上抗 100 斤 水泥 和 肩上抗 100 斤黄金 , 能一样吗 , 扛着黄金绝对能扛回家 ; 员工 不愿意 与公司一条心是正常的 , 员工 拿的是 死工资 , 公司赚…...

C++(QT)画图行车

通过鼠标在窗口上点击形成多个点的连线&#xff0c;绘制一辆汽车沿着绘制的连线轨迹前进。要求连线点数大于20.可以通过清除按钮清除已经绘制的连线&#xff0c;并可以重新绘制一条轨迹连线。当车辆行驶到轨迹终点时&#xff0c;自动停止。&#xff08;汽车实在可用方块代替&am…...

顺义哪里有做网站设计的/什么平台可以做引流推广

今天在写程序的时候想在当前视图跳转的时候释放掉当前视图上面add的一些子视图。因为add的子视图有些是在别的类里面add进来的&#xff0c;当前页面不知道自己当前有哪几个类型的子视图。这样&#xff0c;我就想到了用循环遍历来查看当前视图有没有符合条件的子视图&#xff0c…...

太原做网站公司哪家好/企业网络营销策略分析

第一种是遍历 map中键所对应的值public static void work(Map map) {Collection c map.values();Iterator it c.iterator();for (; it.hasNext();) {System.out.println(it.next());}}第二种是遍历 map中的 键 和 值public static void workByKeySet(Map map) {Set key map.…...

网站建设主要包括哪些/seo搜索引擎优化人员

干货 | 可验证延迟函数&#xff08;VDF&#xff09; 自从以太坊将可验证延迟函数&#xff08;Verifiable Delay Function, VDF&#xff09; 列入研究计划并打算在以太坊 2.0 使用之后&#xff0c;VDF 得到了广泛的关注。VDF 这个概念最初由斯坦福大学密码学教授 Dan Boneh 等人…...

广西网站建设/网店代运营骗局流程

欢迎到本指南以使用Wwise的Oculus 声场定位插件&#xff01;   Welcome to this guide to using the Oculus spatializer plugin in Wwise! 概览&#xff08;Overview&#xff09; Oculus 声场插件&#xff08;OSP&#xff09;是Audiokinetic Wwise工具集中新增的一个插件&a…...

CSS3网站建设/0元入驻的电商平台

2019独角兽企业重金招聘Python工程师标准>>> 闲话不多说&#xff0c;直接上代码&#xff01; 1、第一步&#xff0c;首先搭建如下架构&#xff0c;其中&#xff0c;annotation中放置自己编写的注解&#xff0c;主要包括service controller qualifier RequestMapping…...

网络规划设计师怎么报名/西安seo优化顾问

最近使用了一个非常简单易用的方法解决了业务上的一个insert吞吐量的问题&#xff0c;在此总结一下。 首先我们明确一下&#xff0c;insert吞吐量其实并不是指的IPS&#xff08;insert per second&#xff09;&#xff0c;而是指的RPS&#xff08;effect rows per second&…...