当前位置: 首页 > 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安装…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...