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项目(进阶版) 提示:中间隔了好长时间,我胡汉三又回来继续更新了!!!😂😂😂 文章目录 Webpack5 搭建Vue项目(进阶版)前…...

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

力扣每日一题---207. 课程表
Problem: 207. 课程表 文章目录 解题方法复杂度Code 解题方法 y总的 Topsort 模板题 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( n ) O(n) O(n) Code class Solution {int res 0; public…...
在Kubernetes环境中有关Nginx Ingress与API Gateway的连接问题
文章目录 小结问题解决参考 小结 在Kubernetes环境中是通过Nginx Ingress来从外部访问Kubernetes内部的环境,并用API Gateway来分发请求,碰到了 502 Bad gateway.的问题,并尝试解决。 问题 从外部通过Nginx Ingress访问Kubernetes内部的环…...

c语言练习44:深入理解strstr
深入理解strstr strstr作用展示: #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:…...

无人机航线规划
无人机航线规划,对于无人机的任务执行有着至关重要的作用,无人机在从起点飞向目的点的过程中,如何规划出一条安全路径,并且保证该路径代价最优,是无人机航线规划的主要目的。其中路径最优的含义是,在无人机…...
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 分钟 大家好,我是迷途小书童! tqdm 是一个非常常用的 Python 进度条库,它可以在循环迭代和 IO 操作期间添加一个进度条,直观地显示循环迭代的进程。 tqdm 是在 2013 年发布的,目的是为 Pyth…...
2023-09-05力扣每日一题
链接: 2605. 从两个数字数组里生成最小数字 题意: 两个数组都只包含1-9的数字,求一个最小数,两个数组内都要有它的其中一位 解: 要么是个位数要么是十位数,存一下数量和两边的最小数即可 实际代码&am…...

ODC现已开源:与开发者共创企业级的数据库协同开发工具
OceanBase 开发者中心(OceanBase Developer Center,以下简称 ODC)是一款开源的数据库开发和数据库管理协同工具,从首个版本上线距今已经发展了三年有余,ODC 逐步由一款专为 OceanBase 打造的开发者工具演进成为支持多数…...

生成克隆钓鱼网站与对win7进行后渗透操作
目录 目录 前言 系列文章列表 思维导图 1,实验涉及复现环境 2,CS的介绍 2.1,CS的简介 2.2,CS的主要功能 3,CS的安装 3.1,将cobalt_strike_4.5文件夹放到kali中 3.1,放入过程中的注意事项 3.2,如图所示 4,配置工具 4.1,进入c…...

Ubuntu18中NVIDIA,cuda,cudnn,pytorch安装
注意:nvidia驱动和cuda,cudnn,pytroch,python的对应关系 linux安装pytorch(包括cuda与cudnn)_linux清华园按照pytorch1.12_BryceRui的博客-CSDN博客 安装流程:安装cuda(包括nvidia驱动) cudnn python安装…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...
Qt学习及使用_第1部分_认识Qt---Qt开发基本流程
前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

【VLAs篇】02:Impromptu VLA—用于驱动视觉-语言-动作模型的开放权重和开放数据
项目描述论文标题Impromptu VLA:用于驱动视觉-语言-动作模型的开放权重和开放数据 (Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models)研究问题自动驾驶的视觉-语言-动作 (VLA) 模型在非结构化角落案例场景中表现不佳…...
跑通 TrackNet-Badminton-Tracking-tensorflow2 项目全记录
📝 跑通 TrackNet-Badminton-Tracking-tensorflow2 项目全记录 git clone https://github.com/Chang-Chia-Chi/TrackNet-Badminton-Tracking-tensorflow2.git TrackNet-Badminton-Tracking-tensorflow2 conda create --prefix /cloud/TrackNet-Badminton-Tracking-…...