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

Redis知识分享(三)

目录

前言

七、事务管理

7.1事务中的异常处理

八、订阅发布

8.1概述

​8.2.Redis针对发布订阅相关指令

九、主从复制

9.1主从复制概述

9.2.主从复制的用处 

9.3主从复制实现原理 

​9.3.1.psync指令

9.3.2.复制偏移量 

9.3.3复制积压缓冲区&节点ID 



前言

今天接着分享redis,本次分享的主要是事务管理、订阅发布和主从复制。


七、事务管理

事务的本质,其实就是一组命令的集合。一个事务中的所有命令都会按照命令的顺序去

执行,而中间不会被其他命令加塞。

7.1事务中的异常处理

  1. 命令语法错误。针对语法错误,会导致整个事务执行被中断

  2. 运行操作错误针对执行中的异常,只会导致该条指令的执行失败,而不会影响事务中其他的指令。

八、订阅发布

8.1概述

如果熟悉消息中间件,那么对发布订阅一定不陌生。发布者Publish一条消息,消息发送

到Channel通道中,然后所有订阅了这个通道的订阅者Subscriber都会接收到这条消息。

如下图所示:

8.2.Redis针对发布订阅相关指令

九、主从复制

9.1主从复制概述

主从复制,是指将一台Redis服务器的数据复制到其他的Redis服务器。前者称为主节点

(Master/Leader),后者称为从节点(Slave/Follower);数据是从主节点复制到从节

点的。其中,主节点负责写数据(当然有读的权限),从节点负责读数据(它没有写数

据的权限)。默认的配置下,每个Redis都是主节点。

一个主节点可以有多个从节点,但是一个从节点只能有一个主节点,即:主从节点是1对N的关系。

9.2.主从复制的用处 

  1. 数据冗余。主从复制实现了数据的备份,实际上提供了数据冗余的实现方式。
  2. 故障恢复。当主节点出现异常时,可以由从节点提供服务,实现快速的故障恢复,实际上提供了服务冗余的实现方式。
  3. 负载均衡。在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器的负载;在写少读多的业务场景下,通过多个从节点分担读负载,可以大大提高Redis服务器是并发量。
  4. 高可用。哨兵配合主从复制,可以是实现Redis集群的高可用。

9.3主从复制实现原理 

Redis的主从复制可以分为两个阶段:sync阶段和command propagate阶段。当从节点启

动后,会发送sync指令给主节点,要求全量同步数据,此为sync阶段;那么,如果后续

Master节点接收到新的增删改操作,也需要Slave节点接收同步的更新,这就是command

propagate阶段;

9.3.1.psync指令

当主从节点都正在运行的时候,出现了网络抖动,造成连接断开,那么当网络恢复,两个

节点再次建立起连接的时候。从节点发送sync指令后,主节点依然需要重新生成RDB,并

对从节点进行全量数据的同步造成。那么这中间的耗时是非常严重的,并且传输备份文件

也会对网络带宽造成很大的消耗。那么为了解决这个问题,从Redis 2.8开始,引入了psync指令来代替sync指令。psync指令会根据不同的情况,来确定执行全量重同步还是部分重同步。

  • 全量重同步。当从节点是第一次与主节点建立连接的时候,那么就会执行全量重同步,这个同步过程与上面我们介绍的sync阶段+command propagate阶段一样。
  • 部分重同步。从节点的复制偏移量无法在复制积压缓冲区中找相应待同步的数据 并且 主节点与从节点不是第一次同步(根据Redis节点ID判断)

9.3.2.复制偏移量 

Master节点和Slave节点都保存着一份复制偏移量。当Master节点每次向Slave节点发送n

字节数据的时候,就会在Master节点偏移量加上n;而Slave节点每次接收到n个字节的

时候,也会在Slave节点偏移量上加n。在命令传播阶段,Slave节点会定期的发送心跳

REPLCONF ACK{offset}指令,这里的offset就是Slave节点的offset。当Master节点接

收到这个心跳指令后,会对比自己的offset和命令里的offset,如果发现有数据丢失,那

么Master节点就会推送丢失的那段数据给Slave节点。如下图所示:

9.3.3复制积压缓冲区&节点ID 

什么是复制积压缓冲区?

复制积压缓冲区是由主节点维护的一个固定长度(默认1MB)的队列。它存储了每个字

节值与对应的复制偏移量。因为复制积压缓冲区的大小是固定的,所以它保存的是主节点近

期执行的写命令。当从节点将offset发送给主节点后,主节点便会根据offset与复制积压缓

冲区的大小来决定是否可以使用部分重同步。如果offset之后的数据仍然在复制积压缓冲区

内,则执行部分重同步;否则还是执行全量重同步。

节点ID

Redis节点服务启动之后,就会产生一个用来唯一标识Redis节点的ID。当Master节点与

Salve节点进行第一次连接同步的时候,Master节点会将ID发送给Slave节点,Slave节点接收

到会对其进行保存。那么当主从服务之间发生了中断重连的时候,Slave服务器会将这个ID

发送给Master服务器,Master服务器会拿自己的ID进行对比,如果相同,则说明主从之前是

连接过的。否则,则说明是第一次建立的连接。那么,就需要全量去同步数据了。

相关文章:

Redis知识分享(三)

目录 前言 七、事务管理 7.1事务中的异常处理 八、订阅发布 8.1概述 ​8.2.Redis针对发布订阅相关指令 九、主从复制 9.1主从复制概述 9.2.主从复制的用处 9.3主从复制实现原理 ​9.3.1.psync指令 9.3.2.复制偏移量 9.3.3复制积压缓冲区&节点ID 前言 今天…...

python安装包报错

多次安装均报错 ERROR: Could not find a version that satisfies the requirement win10toast ERROR: No matching distribution found for win10toast 然后还提示 WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connectio…...

Linux性能优化之火焰图简介

Linux 火焰图(Flame Graph)是一种可视化工具,用于分析程序性能问题,尤其是 CPU 使用情况。它展示了程序中函数调用的层次结构和各个调用栈占用的时间比例。 以下是详细介绍,包括火焰图的工作原理、生成步骤和实际使用中…...

Unity类银河战士恶魔城学习总结(P129 Craft UI 合成面板UI)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了合成面板的UI设置 UI_CraftWindow.cs 字段作用: UI 组件: itemName / itemDescription / icon&#…...

linux基础笔试练习题笔记(2)

在Linux系统上,下面那个命令不可以用来查看文件内容() A.cat B.ls C.less D.more 答案解析: cat命令用用于一次性显示文件的所有内容,一般文件内容较多时一般会使用more或less命令。 more:分页显示文件内容&#xf…...

Android OpenGL ES详解——glTexImage2D方法

glTexImage2D是OpenGL中的一个重要函数,其作用是为2D纹理分配显存并上传数据。以下是关于glTexImage2D作用的详细解释: 一、函数原型 在OpenGL ES 2.0中,glTexImage2D的函数原型如下: GL_APICALL void GL_APIENTRY glTexImage2…...

Redisson 中开启看门狗(watchdog)机制

在分布式系统中,分布式锁是一种常用的技术手段,用于确保在多个节点同时访问共享资源时的一致性和正确性。Redisson 是一个强大的 Java 分布式框架,它提供了丰富的分布式数据结构和服务,其中开启看门狗(watchdog&#x…...

【JSOO】设计模式

单例模式工厂模式状态模式观察者模式桥接模式 设计模式(是一种通过经验中总结出来的经过反复验证能够解决一类通用问题的可以反复重用的就可称它为模式,否则只能称为功能模块);模式:把解决问题的方法抽取出来&#xff…...

本草纲目数字化:Spring Boot在中药实验管理中的应用

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理中药实验管理系统的相关信息成为必然。开发…...

java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程

文章目录 PC Register堆虚拟机栈方法区(Metaspace元空间双亲委派机制类加载器 类装载的执行过程 PC Register 程序计数器(Program Counter Register)是 Java 虚拟机(JVM)中的一个组件,它在 JVM 的内存模型中扮演着非常…...

重构Action-cli前端脚手架

一、概述 最近一年,为了满足公司业务开发,解决重复搭建项目繁琐过程,自己开发了一个前端脚手架,并发布到npm。随着时间的推移,发现之前的版本存在很多问题,有些功能做不到位,而且代码也不是很规…...

华为USG5500防火墙配置NAT

实验要求: 1.按照拓扑图部署网络环境,使用USG5500防火墙,将防火墙接口加入相应的区域,添加区域访问规则使内网trust区域可以访问DMZ区域的web服务器和untrust区域的web服务器。 2.在防火墙上配置easy-ip,使trust区域…...

【大数据学习 | HBASE高级】hive操作hbase

一般在查询hbase的数据的时候我们可以直接使用hbase的命令行或者是api进行查询就行了,但是在日常的计算过程中我们一般都不是为了查询,都是在查询的基础上进行二次计算,所以使用hbase的命令是没有办法进行数据计算的,并且对于hbas…...

集群聊天服务器(9)一对一聊天功能

目录 一对一聊天离线消息服务器异常处理 一对一聊天 先新添一个消息码 在业务层增加该业务 没有绑定事件处理器的话消息会派发不出去 聊天其实是服务器做一个中转 现在同时登录两个账号 收到了聊天信息 再回复一下 离线消息 声明中提供接口和方法 张三对离线的李…...

《FreeRTOS列表和列表项篇》

FreeRTOS列表和列表项 1. 什么是列表和列表项?1.1 列表list1.2 列表项list item 2. 列表和列表项的初始化2.1 列表的初始化2.2 列表项的初始化 3. 列表项的插入4. 列表项末尾插入5. 列表项的删除6. 列表的遍历 列表和列表项是FreeRTOS的一个数据结构,是F…...

C++:哈希拓展-位图

目录 一.问题导入 二.什么是位图? 2.1如何确定目标数在哪个比特位? 2.2如何存放高低位 2.3位图模拟代码实现 2.3.1如何标记一个数 2.3.2如何重置标记 2.3.3如何检查一个数是否被标记 整体代码实现 标准库的Bitset 库中的bitset的缺陷 简单应用 一.问题导入 这道…...

【数据结构与算法】查找

文章目录 一.查找二.线性结构的查找2.1顺序查找2.2折半查找2.3分块查找 三.树型结构的查找3.1二叉排序树1.定义2.二叉排序树的常见操作3.性能分析 3.2平衡二叉树1.定义2.平衡二叉树的常见操作3.性能分析 3.3B树1.定义2.B树的相关操作 3.4B树1.定义2.B树与B树的比较 四.散列表1.…...

从零开始学习 sg200x 多核开发之 milkv-duo256 编译运行 sophpi

sophpi 是 算能官方针对 sg200x 系列的 SDK 仓库 https://github.com/sophgo/sophpi ,支持 cv180x、cv81x、sg200x 系列的芯片。 SG2002 简介 SG2002 是面向边缘智能监控 IP 摄像机、智能猫眼门锁、可视门铃、居家智能等多项产品领域而推出的高性能、低功耗芯片&a…...

LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143725947 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 LLaMA-…...

基于STM32设计的大棚育苗管理系统(4G+华为云IOT)_265

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

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

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

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...