Redis异步写失败后补数逻辑设计

背景

最近各种机房事故频发,所以很多公司都对Redis存储等进行异步多活,我们公司采用的方式是通过客户端双写的方式来实现异地Redis机房的备份,但是当异地机房出现临时网络故障时,就涉及到了如何进行补数的操作,本文就是来记录下如何补数

Redis补数设计

首先可以补数的前提肯定需要记录写异地机房失败的redis命令,所以当客户端在写异地机房失败时,我们需要先把失败的redis命令写到kafka主题中,不过由于我们需要确保同一个key操作的顺序性,所以需要确保同一个redis的key命令发送到同一个kafka分区

其次补数的主要逻辑是通过对比Redis源集群和目标集群对应key的数据,把Redis源集群的key对应的value设置到目标Redis集群的key上面

此外还需要考虑的一些要点包括:

1.为了防止对Redis造成太大的压力,消费消息时需要进行限流(可以通过预期QPS/分片数=每个分片的消费速度,进行每分片限流)

2.补数时针对不同的redis的cmd需要不同的处理逻辑,比如针对SADD和SET就是两种不同的处理逻辑

方案设计如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/306382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6 - 数据备份与恢复|innobackupex

数据备份与恢复|innobackupex 数据备份与恢复数据备份相关概念物理备份与恢复逻辑备份(推荐)使用binlog日志文件实现对数据的时时备份‘使用日志 恢复数据 innobackupex 对数据做备份和恢复增量备份与恢复 数据备份与恢复 数据备份相关概念 …

【算法Hot100系列】搜索插入位置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

资源调度(2)-----pod的亲和性和反亲和性

集群调度: schedule的调度算法。 预算策略:过滤出合适的节点 优先策略: 选择部署的节点 nodeName:硬匹配,不走调度策略。node01. nodeSelector:根据节点的标签选择,会走调度算法。 只要是走调度算法,在不满…

软件测试|Python对JSON的解析和创建详解

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已经成为当今互联网应用中广泛使用的数据格式之一。Python提供了内置的模块来解析和创建JSON数据,使得在Python中处理JSON变得非常简单。本文将详细介绍Python…

ProtoBuf一些踩坑记录

一、Protobuf学习基础 学习的资料很多也很全,这里添加几个链接进行Protobuf的基础学习的链接,链接中的案例使用C编辑: 链接:Protobuf介绍及简单使用(上)_google_protobuf_version-CSDN博客 Protobuf介绍及简单使用(下&…

从网页连接socket服务器和I/O

1.i/o InputStream和InputStreamReader是Java I/O类库中的两个关键类,用于处理字节流。它们的主要区别在于它们处理数据的方式。 InputStream: InputStream是用于读取字节流的抽象类。它是所有字节输入流类的父类。InputStream的子类可以从不同的数据源读取字节&…

了解 Node.js 的运行机制:从事件循环到模块系统(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

typora导出html添加目录

typora导出html添加目录 使用方法 首先要从typora导出html文件,之后用记事本编辑器html文件 找到文档最后面,如图: 用文字编辑类工具打开sideBar.txt,复制其中所有内容【内容在下面】 在如上图的位置插入所复制的内容 打开修改…

面试宝典进阶之Java线程面试题

T1、【初级】线程和进程有什么区别? (1)线程是CPU调度的最小单位,进程是计算分配资源的最小单位。 (2)一个进程至少要有一个线程。 (3)进程之间的内存是隔离的,而同一个…

信息系统安全——基于 AFL 的模糊测试

实验 3 基于 AFL 的模糊测试 3.1 实验名称 《基于 AFL 的模糊测试》 3.2 实验目 1 、熟悉模糊测试方法 2 、熟悉模糊测试工具 AFL 的使用 3.3 实验步骤及内容 1 、 安装 AFL 2 、 任意选择一个有源代码的样本 这里采用教材上一个包含栈溢出漏洞的样本。 3 、 结合源代码分析用 …

8.云原生存储之Ceph集群

1. 私有云实战之基础环境搭建 2. 云原生实战之kubesphere搭建 3.云原生之kubesphere运维 4. 云原生之kubesphere基础服务搭建 5.云原生安全之kubesphere应用网关配置域名TLS证书 6.云原生之DevOps和CICD 7.云原生之jenkins集成SonarQube 8.云原生存储之Ceph集群 文章目录 为什么…

python 队列

队列常用方法 Python中的队列是一种数据结构,遵循先进先出(FIFO)的原则。在Python中,你可以使用内置模块queue提供的Queue类来实现队列数据结构。队列是一种常见的数据结构,用于按照特定顺序处理数据项,例…

x-cmd pkg | termsvg - 用于记录终端会话并导出为 SVG 图像的终端录制工具

目录 简介首次用户简单易用支持暂停录制兼容asciinema类似工具进一步阅读 简介 termsvg 是一款用 Go 编写命令行工具,可以用来录制终端操作和重新播放,而且可以导出录制文件为 svg 动画。其录制文件使用与 asciinema 相同的格式,因此您可以使…

【2024最新-python3小白零基础入门】No2.python基础语法

文章目录 1 编码2 标识符规则3 python保留字4 注释5 行与缩进6 多行语句7 数字(Number)类型8 字符串(String)9 空行10 等待用户输入11 同一行显示多条语句12 import 与 from...import 环境准备,打开pycharm,新建一个python文件 文件名称随便,可中文可英文…

ECMAScript6历史-前端开发+ECMAScript+基础语法+入门教程

ECMAScript6详解 ECMAScript 历史 我们首先来看 ECMA 是什么。ECMA,读音类似“埃科妈”,是欧洲计算机制造商协会(European Computer Manufacturers Association)的简称,是一家国际性会员制度的信息和电信标准组织。19…

ML:2-2neural network layer

文章目录 1. 神经网络层2. 更复杂的神经网络3. 神经网络的前向传播 【吴恩达机器学习笔记p47-49】 1. 神经网络层 input:4个数字的向量。3个神经元分别做logistic regression。下角标:标识第 i 个神经元的值。上角标:表示第 j 层layer的值。…

JAVA面向对象基础-容器

一、泛型 我们可以在类的声明处增加泛型列表&#xff0c;如&#xff1a;<T,E,V>。 此处&#xff0c;字符可以是任何标识符&#xff0c;一般采用这3个字母。 【示例9-1】泛型类的声明 1 2 3 4 5 6 7 8 9 10 class MyCollection<E> {// E:表示泛型; Object[] o…

使用 Apache PDFBox 操作PDF文件

简介 Apache PDFBox库是一个开源的Java工具&#xff0c;专门用于处理PDF文档。它允许用户创建全新的PDF文件&#xff0c;编辑现有的PDF文档&#xff0c;以及从PDF文件中提取内容。此外&#xff0c;Apache PDFBox还提供了一些命令行实用工具。 Apache PDFBox提供了创建、渲染、…

HarmonyOS应用开发学习笔记 应用上下文Context 获取文件夹路径

1、 HarmoryOS Ability页面的生命周期 2、 Component自定义组件 3、HarmonyOS 应用开发学习笔记 ets组件生命周期 4、HarmonyOS 应用开发学习笔记 ets组件样式定义 Styles装饰器&#xff1a;定义组件重用样式 Extend装饰器&#xff1a;定义扩展组件样式 5、HarmonyOS 应用开发…

高效构建Java应用:Maven入门和进阶(三)

高效构建Java应用&#xff1a;Maven入门和进阶&#xff08;三&#xff09; 三. Maven的核心功能和构建管理3.1 依赖管理和配置3.2 依赖传递和冲突3.3 依赖导入失败场景和解决方案3.4 扩展构建管理和插件配置 三. Maven的核心功能和构建管理 3.1 依赖管理和配置 Maven 依赖管理…