数据同步策略解读

前言

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

缓存由于其高并发和高性能的特性,已经在项目中被广泛使用,在缓存的使用中,通常会面临一个更新的问题,当数据源产生变化,如何去更新到数据库与缓存之中,并且尽量保证安全与性能。 

缓存主动更新策略

    方案一:由缓存的调用者在更新数据库的时候同时更新缓存

    方案二:将缓存和数据库整合为一个服务,由该服务来维护一致性。对外提供接口,调用者调用该服务提供的接口,无需关心缓存一致性问题

    方案三:调用者只操作缓存,由其他线程异步将缓存数据持久化到数据库,保证最终一致性。

数据同步策略

设置有效期

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

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

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

假设一个缓存的有效期为10min,但是这个缓存产生以后的5min就被修改了,在后面的5min内进行的查询,读到的都是缓存的数据,不是最新的数据。 

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

 同步双写

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

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

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

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

异步通知

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

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

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

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

而异步实现又可以基于MQ或者Canal来实现:

1)基于MQ的异步通知:

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

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

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

解读:

  • 商品服务完成对数据的修改后,只需要发送一条消息到MQ中。

  • 缓存服务监听MQ消息,然后完成对缓存的更新

依然有少量的代码侵入。

2)基于Canal的通知

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

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

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

解读:

  • 商品服务完成商品修改后,业务直接结束,没有任何代码侵入

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

  • 缓存服务接收到canal通知,更新缓存

代码零侵入

Canal [kə'næl],译意为水道/管道/沟渠,canal是阿里巴巴旗下的一款开源项目,基于Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。GitHub的地址:GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件

Canal是基于mysql的主从同步来实现的,Canal就是把自己伪装成MySQL的一个slave节点,从而监听master的binary log变化。再把得到的变化信息通知给Canal的客户端,进而完成对其它数据库的同步。

 

  • 1)MySQL master 将数据变更写入二进制日志( binary log),其中记录的数据叫做binary log events

  • 2)MySQL slave 将 master 的 binary log events拷贝到它的中继日志(relay log)

  • 3)MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

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

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

相关文章

新版JetBrains ToolBox【Windows】修改应用安装位置

WIndows下新版的JetBrainse ToolBox 无法修改应用安装路径 关闭 ToolBox 应用修改配置文件.settings.json 路径:C:\Users\用户名\AppData\Local\JetBrains\Toolbox "install_location": "xxx",

【Hello Go】Go语言工程管理

工程管理 工作区工作区介绍GOPATH设置 包自定义包main包main函数和init函数导入包点操作别名操作_操作 测试案例GOPATH配置go install使用 在我们实际的工作中 直接运用到编译器进行编译链接的场景少之又少 这是因为 在工程中不会只有一个源文件 并且源文件之间也有着相互依赖…

调试/抓包工具

一、Fiddler【推荐window使用】 介绍:个人认为是 Windows 平台最好用的抓包工具; 下载:Fiddler | Web Debugging Proxy and Troubleshooting Solutions 使用方式:这一篇文章写的很全,认真看完就够用了 Fiddler 抓包工…

FL Studio21.2最新版本支持终身免费更新

你是否体验过Tomorrowland现场万人蹦迪的的激情?又是否加入过“死墙(Mosh pit:一种Bass音乐节常有的娱乐方式)”的狂欢盛宴?随着时代发展,以电子音乐为代表的数字音乐已然象征着时尚与潮流。在这股风靡全球…

YB203H系列是一组CMOS技术实现的三端低功耗高电压稳压器

概述: YB203H系列是一组CMOS技术实现的三端低功耗高电压稳压器。输出电流为200mA且允许的输入电压可高达80V。具有几个固定的输出电压,范围从2.1V到12.0V.CMOS技术可确保其具有低压降和低静态电流的特性。最高耐压100W.尽管主要为固定电压调节器而设计,…

Mysql -常见函数

目录 字符串函数 数值函数 日期函数 流程函数 字符串函数 -- 拼接 SELECT CONCAT(Hello, World); -- 小写 SELECT LOWER(Hello); -- 大写 SELECT UPPER(Hello); -- 左填充 SELECT LPAD(01, 5, -); -- 右填充 SELECT RPAD(01, 5, -); -- 去除空格 SELECT TRIM( Hello World )…

群晖邮件设置,错误535 Authenticate failed问题

设置邮件通知或者报警很方便,群晖内部内置这个功能。在设置的时候遇到错误535 Error:authentication failed。 原因是:这个错误就是认证失败! 但是相信很多的同学明明用户名和密码填的是对的,就是说认证失败&#xf…

MATLAB中plotmatrix函数用法

目录 语法 说明 示例 使用两个矩阵输入创建散点图矩阵 使用一个矩阵输入创建散点图矩阵 指定标记类型和颜色 创建并修改散点图矩阵 plotmatrix函数的功能是创建散点图矩阵。 语法 plotmatrix(X,Y) plotmatrix(X) plotmatrix(___,LineSpec) plotmatrix(ax,___) [S,AX,B…

如何啟用 BitLocker來加密硬盤

概述 什麼是 BitLocker: BitLocker 磁碟機加密是一項本機安全性功能,可對安裝 Windows 的磁碟機上的所有內容進行加密。設備加密透過加密來幫助保護您的資料。只有擁有正確加密金鑰(例如個人識別碼)的人才能解密它。 它是如何運…

2.认识中台

1.数字化中台初步认识与建设策略 中台的定义 阿里对中台的定义: 中台是一个基础的理念和架构,我们要用中台的思想建设、联通所有基础服务,共同支持上端的业务。业务中台更多的是支持在线业务,数据中台则提供基础数据处理能力和很多的数据产…

C语言百钱买百鸡(ZZULIOJ1074:百钱买百鸡)

题目描述 百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只? 本程序要求解的问题是:给定一个正整数n,用n文钱买n只鸡&…

跨境电商与文化多样性:市场中的机遇

在数字时代,跨境电商已经成为全球贸易的主要驱动力之一。随着互联网的普及和物流的改善,企业有机会将产品和服务推向全球市场。 然而,随着全球市场的扩大,文化多样性也成为了一个重要的考虑因素。本文将深入探讨跨境电商与文化多…

Wireshark 截取指定端口海量包分析

有个应用要分析一下协议,但是8939,8940传输一下子几个G的数据,但是要分析的端口8939实际上只有几个MB最多,如果用wireshark有界面的程序一截取就会卡死,于是使用命令行方式,截取指定端口的 tshark -i &quo…

AI先行者第三辑:石油专家正在加速“吸入”AI养分

AI对于石油行业而言,绝不是一个非此即彼、非黑即白、有用或者无用的简单命题,而是一个如何不断深入去提升效率,逐步证明自己价值的过程。 本篇作者安鹏,中国海洋石油集团有限公司信息技术中心 技术中台工程师;AICA首席…

【MyBatis】写了 10 年的代码,我最怕写 MyBatis 这些配置,现在有详解了

在使用 mybatis 过程中,当手写 JavaBean和XML 写的越来越多的时候,就越来越容意出错。这种重复性的工作,我们当然不希望做那么多。 还好, mybatis 为我们提供了强大的代码生成--MybatisGenerator。 通过简单的配置,我们…

【数据结构】图的简介(图的逻辑结构)

一.引例(哥尼斯堡七桥问题) 哥尼斯堡七桥问题是指在哥尼斯堡市(今属俄罗斯)的普雷格尔河(Pregel River)中,是否可以走遍每座桥一次且仅一次,最后回到起点的问题。这个问题被认为是图…

安全知识普及:什么是垃圾邮件和网络钓鱼欺诈

文章目录 什么是垃圾邮件?如何保护您自己免遭垃圾电子邮件和网络钓鱼侵害区分私人和公用电子邮件私人电子邮件公共电子邮件 使用反垃圾邮件过滤器推荐阅读 什么是垃圾邮件? 您的邮箱里经常会出现一些莫名其妙的邮件,而这就是电子形式的垃圾邮…

早晨暖心的早安问候语,祝好心情从清晨开始,愿你享受美好生活每一天!

1、冬天里,重调理;多锻炼,日光浴;早安睡,晚游历;勤开窗,通空气;暖腹背,寒不欺;适滋补,强体力;心乐观,无忧虑;温…

Java学习之路 —— 网络通信

文章目录 1. InetAddress2. UDP3. TCP4. 总结 1. InetAddress InetAddress的常用方法如下: public class InetAddressDemo {public static void main(String[] args) throws Exception{// 1. 获取本机IP地址对象InetAddress ip1 InetAddress.getLocalHost();Sys…

车间ERP管理系统都有哪些?能带给企业什么好处

不同规模的制造企业有不同的管理模式和经营策略,而生产和销售等业务是这类企业较为核心的部门,其中车间的管理是生产过程管理的重点环节之一。 车间的管理工作涉及物料、班组、设备、工时评估、生产现场数据采集、派工单、退补料等环节,如何…