Redis缓存同步1-策略介绍

news2024/9/20 20:48:37

 

缓存数据同步策略示意图

在大多数情况下,我们通过浏览器查询到的数据都是缓存数据,如果缓存数据与数据库的数据存在较大差异的话,可能会产生比较严重的后果的。所以,我们应该也必须保证数据库数据、缓存数据的一致性,这就是缓存与数据库的同步。

缓存数据同步策略

缓存数据同步,常见的有三种方式:

1:设置有效期

给缓存设置有效期,到期后自动删除。再次查询的时候,更新数据。

这种方式的优缺点及使用场景如下:

优点:简单、方便、好理解;

缺点:时效性差,缓存过期之前可能数据库中的数据和缓存中的数据就不一致了了。

使用场景:更新频率低,时效性要求低的业务。

2:同步双写

同步双写策略就是在修改数据库的同时,也修改缓存。

同步双写的优缺点:

优点:时效性强,缓存与数据库强一致;

缺点:有代码侵入,耦合度高;只要操作数据库的插入、更新及删除相关业务操作,就要去同步更新缓存,这种耦合度太高了;

使用场景:对一致性、时效性要求较高的缓存数据。

3:异步通知

异步通知其实就是在修改了数据库的时候,发送时间通知,相关服务监听到通知之后异步的修改缓存数据。

这种方式的优缺点:

优点:低耦合,可以同时通知多个缓存服务。可以使用MQ,异步特性来更新缓存,这样更新数据库和更新缓存就解耦了,而且一次可以更新多个服务,同时,代码入侵也是很少的(只有发送MQ少量代码)甚至是零入侵就可以实现;

缺点:时效性一般,可能存在中间不一致的状态。因为是异步的,可能会存在时间差,导致数据在某一时刻,是不一致的。但是可以保证最终一致性

使用场景:时效性要求一般的,有多个服务需要同步更新缓存的。

事实上,大多数场景下,我们都可以通过异步通知这种策略来更新缓存。所以,我们就来深入的讲讲异步通知。

通常情况下,异步通知实现方案,可以基于MQ或者是基于Canal来实现。

异步通知的两种方案

我们先来看看基于MQ异步通知的流程

MQ异步通知更新缓存

我们以修改了商品后,更新对应的缓存为例来讲讲。业务流程大致如下描述:

1:在页面修改了商品信息后,商品信息入库,保存到MySQL数据库中;

2:入库成功后,发布一个MQ消息;

3:有个服务监听对应MQ消息,如果接收到消息后,就更新对应商品的缓存信息

流程图如下:

 

MQ异步通知更新缓存流程图

这种方案,依然有少量的代码入侵:在写完数据库后,发送MQ消息,这点代码入侵是没办法省略的。

第二种方案,就是Canal通知

基于Canal的通知

基于Canal通知的业务流程如下图:

 

基于Canal通知的业务流程图

流程解读:

1:商品服务完成商品修改后,商品信息入库后,相关业务直接结束。这里没有任何的代码入侵;

2:Canal监听MySQL变化,当发现变化后,立即通知缓存服务;

3:缓存服务接收到canal通知后,更新缓存

使用Canal的异步通知是代码零侵入的。所以,这里,咱们就选择基于Canal的通知。接下来,我们就来讲讲Canal

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于simulink使用颜色识别来进行道路跟踪(附源码)

一、前言 此示例演示如何使用颜色信息来检测和跟踪在可能不存在车道标记的主要住宅环境中设置的道路边缘。基于颜色的跟踪示例说明了如何使用色彩空间转换块、霍夫变换块和卡尔曼滤波器块来检测和跟踪使用色调和饱和度的信息。 二、模型 下图显示了基于颜色的道路跟踪模型&a…

MATLAB的num2str,把循环变量作为字符串的内容

MATLAB的num2str,把循环变量作为字符串的内容 输入代码: i 2; abc [sdfg,num2str(i),dsfg]运行结果: 解析: MATLAB里面的[ ]是会把元素组合的意思 现在有: a1 3; a2 4; a3 5; 然后我想通过for循环,循…

mac与pd虚拟机之间不能粘贴文字或粘贴文件

首先确保共享打开: 然后检查虚拟机的Parallels Tools是否正常 一个简单的判断方式就是,退出虚拟机全屏之后,如果能够正常进入融合模式,那么Parallels Tools可用,否则就要排查问题 检查Parallels Tools是否随系统正常启…

C++11 | 智能指针

智能指针 前面的文章中我们介绍了C中的异常有关的知识点,同时在其中我们遇到了有关内存方面的问题,如下所示: int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; } void…

数据结构算法题——链表

leetcode-2.两数之和 leetcode-2.两数之和 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数…

猿人学做题笔记

简单记录一下做题的思路步骤 1、第一题说的是无混淆加密(简单): 刚开始观察请求,发现链接和请求携带的参数都没有什么异常,然后直接请求会拿不到数据,于是仔细看了一下请求包,发现请求头里面有…

03-Vue基础语法之指令语法与条件渲染

个人名片: 😊作者简介:一名大一在校生,web前端开发专业 🤡 个人主页:python学不会123 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习…

【GaussDB(DWS)】数据分布式存储-三种类型的表

toc 一、环境说明 华为数据仓库服务DWS,集群版本8.1.3.320集群拓扑结构: 二、数据分布式方式 DWS采用水平分表的方式,将业务数据表的元组打散存储到各个节点内。这样带来的好处在于,查询中通过查询条件过滤不必要的数据&#…

[工业互联-18]:常见EtherCAT主站方案:SOEM的Windows/Linux解决方案

目录 第1章 SOEM 简介 第2章 SOEM创建EtherCAT主站 2.1 支持Linux和Windows操作系统 2.2 SOEM创建EtherCAT主站的步骤 第3章 QT添加SOEM主站 第1章 SOEM 简介 SOEM (Simple Open EtherCAT Master) 是一种开源的EtherCAT主站协议栈。 EtherCAT(Ethernet for C…

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

简介 飞轮储能系统由于其高储能密度、高效率、轻污染的优点而越来越受到重视。飞轮储能系统以高速旋转的飞轮为依托,通过电力电子设备实现电能与动能的相互转化,从而在负载调峰、功率平抑、不间断电源等多领域都有很好的应用表现。 本文选用永磁同步电机…

基于simulink仿真车道偏离警告系统(附源码)

一、前言 此示例演示如何在视频序列中检测和跟踪道路车道标记,并在驾驶员穿过车道时通知驾驶员。该示例说明了如何使用霍夫变换、霍夫线和卡尔曼滤波器模块来创建线检测和跟踪算法。该示例使用以下步骤实现此算法:1) 检测当前视频帧中的车道…

计算机通信地址【图解TCP/IP(笔记六)】

文章目录 地址地址的唯一性地址的层次性 地址 通信传输中,发送端和接收端可以被视为通信主体。它们都能由一个所谓“地址”的信息加以标识出来。当人们使用电话时,电话号码就相当于“地址”。当人们选择写信时,通信地址加上姓名就相当于“地…

HarmonyOS学习路之开发篇—数据管理(数据存储管理)

数据存储管理概述 数据存储管理指导开发者基于HarmonyOS进行存储设备(包含本地存储、SD卡、U盘等)的数据存储管理能力的开发,包括获取存储设备列表,获取存储设备视图等。 基本概念 数据存储管理 数据存储管理包括了获取存储设备…

Vue3+Vite项目配置@路径别名

一、根目录下 vite.config.ts 文件中配置 import { resolve } from path;resolve: {// 设置文件./src路径为 alias: [{find: ,replacement: resolve(__dirname, ./src)}] }二、根目录下 tsconfig.json 文件中配置 //配置 "baseUrl": ".", "paths&qu…

【复习25-29题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二十天 20/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

智能底盘(2) | 汽车制动系统的发展概述

摘要: 自汽车诞生以来,车辆制动系统就始终在实现汽车流畅操控、保障汽车安全等功能中起着决定性的作用。而制动系统本身也随着工业技术的变革和汽车行业的发展持续进化。 根据制动场景的区别,制动系统可以分为以下两类: 行车制动…

开源新项目Auto-Annotation,这你不了解一下

Auto-Annotation 一个注解实现对业务功能增强的注解集 项目简介 ​ 项目源码开源地址:点这里 ​ 对业务开发过程中经常遇见的一些通用场景进行注解封装,形成一系列比较通用的注解集,来满足日常开发需要。注解集随业务拓展不断更新中&#…

Qt6 第一天认识基本模块、附加模块、支持的平台、QML用户界面

文章目录 Qt6 焦点Qt6 核心-基本模块Qt6 附加模块Qt6 支持的平台Qt6 简介Qt6 消化用户界面 Qt6 焦点 Qt 5在很多年前发布,引入了一种新的声明方式来编写令人惊叹的用户界面。从那时起,我们周围的世界发生了很大的变化。 Qt 6将是Qt 5的延续,不…

插值查找(思路+代码)

变量和二分查找差不多,但是公式变了 公式: int mid left (right - left) * (indexValue -arr[left]) / ( arr[right] - arr[left]) 注意事项: 适用于数据量比较大,数据分布均匀的数据 代码: package search;impor…

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积…