双写一致性

news2024/11/27 10:31:15

双写一致性

当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。

注意这里是对数据库进行写操作而不是读操作,通常我们有两种方式完成这个写操作,分别是:先删除缓存再修改数据库 和 先修改数据库再删除缓存,但是这两种方式都存在问题(出现脏数据)。

先删除缓存再修改数据库:

先删除缓存再修改数据库的话,如果在 线程1 删除缓存后有 线程2 对数据进行了查询(此时数据库中的数据仍然是旧数据,且缓存中已经没有数据)并将查询的值写入缓存,那么缓存中存放的就是旧数据,此时 线程1 也完成了对数据库的更新,那么就会出现数据库是新数据而缓存是旧数据的情况。

先修改数据库再删除缓存:

我们这里讨论一种特殊情况,就是缓存中的数据过期了,此时 线程1 去查缓存查不到,就会去访问数据库(此时数据库是旧数据),突然 线程2 横插一脚,它来执行了一个更新数据库的操作,把数据库的数据更新为了新数据,并去删除缓存(虽然缓存中没有数据,不过不影响),线程2 执行完毕后 线程1 继续执行,把它访问数据库(旧数据)的数据更新到缓存中,这样就出现了缓存是旧数据而数据库是新数据的情况。

为了减少脏数据的出现,我们可以使用下面这种方法

延迟双删:

在删除缓存、修改数据库后再次进行一次缓存删除,注意要延时(因为数据库也可能有子节点,需要给时间给主从节点的数据同步),不过延时的时间并不能确定,所以依然有脏数据出现的可能,但是也已经极大的控制了这个可能性。

如果我们的系统有强一致性的要求,就需要使用分布式锁来实现了

分布式锁:

这种方法呢就保证了强一致性,但是性能较差,我们可以用读写锁(ReadWriteLock)优化一下

共享锁readLock,只限制写操作,加了这个锁后不影响别人的读操作(读操作时添加,读读不互斥,读写互斥)

独占锁writeLock,读写都影响(写操作时添加)

毕竟是加锁,其实这种方法的性能也是不高,不过保证了强一致性,在我们对强一致性要求不高(也许延迟一致的时候),可以使用下面两种异步通知的方法。

基于MQ的异步通知:

基于Canal的异步通知:

这种方法更好一点,canal会伪装成mysql的一个从节点,不会对代码进行侵入。

两种异步通知的方法当然都是存在短暂的延迟的,不能保证强一致性,都是最终数据都会变成一致的,我们可以按需选择自己的方法。

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

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

相关文章

视觉与运动控制1

机器视觉与运动控制 机器视觉的应用 机器视觉是计算机视觉的一个分支,工业自动化领域中的视觉控制或视觉应用,主要指的是通过前端光学摄像头,从采集到的数字化图像中提取相关信息,进行分析处理之后,用于对生产线流程…

编译xlnt开源库源码, 使用c++读写excel文件

编译xlnt开源库源码,在linux平台使用c读写excel文件 下载xnlt源码 官方网站https://tfussell.gitbooks.io/xlnt/content/ 下载地址https://github.com/tfussell/xlnt 下载libstudxml开源库源码 下载地址https://github.com/kamxgal/libstudxml 下载xnlt源码 官方网站https://…

AI网络爬虫:用deepseek提取百度文心一言的智能体数据

真实网址:https://agents.baidu.com/lingjing/experhub/search/list?pageSize36&pageNo1&tagId-99 返回的json数据:{ "errno": 0, "msg": "success", "data": { "total": 36, "p…

【动态规划】路径问题 {二维动态规划;选择合适的状态表示方法;创建虚拟节点}

一、经验总结 选择合适的状态表示方法 一般的,状态表示的方法有两种: 以[i, j]位置为终点,正向填表;用之前的状态推导出dp[i][j]的值(从哪里来);以[i, j]位置为起点,反向填表&…

Spring Boot组件化与参数校验

Spring Boot组件化与参数校验 Spring Boot版本选择 2.3.x版本 2.6.x版本 Spring Boot核心思想 约定大于配置,简化繁琐的配置 Spring Boot自动配置原理 SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,Spr…

详细分析Oracle日期和时间的基本命令

目录 1. 基本类型2. 常用函数3. Demo 1. 基本类型 Oracle支持不同的日期格式模型,其中包括: ISO 8601: YYYY-MM-DDTHH:MI:SS,例如2024-06-20T14:30:00Oracle内部格式: DD-MON-YYYY HH:MI:SS AM,例如20-JUN-2024 02:30:00 PM DA…

6月20日(周四)欧美股市总结:“三巫日”当前,标普开盘创新高后与纳指转跌,英伟达一度跳水8%,市值跌离最大

美国上周首次申请失业救济人数高于预期,新屋建造和费城制造业数据均显示经济放缓,市场维持对美联储年内降息两次的预期。标普盘初升破5500点创新高后下跌,纳指止步七日连创新高,但道指涨300点至四周新高。英伟达盘初涨3.8%至盘中最…

【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:初步了解 二叉搜索树 🌹🌹期待您的关注 🌹🌹 ❀map与set 📒1.…

绿色领航·数链未来“2024中国消费电子博览会”招商工作全面启动

中国国际消费电子博览会(简称CICE电博会)自2001年创办以来,已逐渐发展成为全球极具影响力的行业盛会。它不仅是国内外消费电子产业的重要交流平台,更是展示我国消费电子产业发展成果的重要窗口。2024年,这一盛会再次在…

windows下前端开发环境安装

文章目录 windows下前端开发环境安装1. Cmder 终端使用1.1 cmder进入指定目录 2. nodejs环境安装3. vscode编辑器下载3.1 vscode插件离线安装 windows下前端开发环境安装 1. Cmder 终端使用 使用Cmder替换cmd,让开发更高效 https://cmder.net/ 打开网址后&#…

系统架构设计师 - 数据库系统(1)

数据库系统 数据库系统数据库模式 ★分布式数据库 ★★★数据库设计阶段 ★★ER模型 ★关系模型 ★ ★结构约束条件完整性约束 关系代数 ★ ★ ★ ★概述自然连接 大家好呀!我是小笙,本章我主要分享系统架构设计师 - 数据库系统(1)知识,希望内…

掌握心理学知识成为产品经理一门必修课?

文章目录 心理学与产品设计的关联关系产品经理需要学习哪些心理学知识产品心理学的学习对象包含哪些 谈及心理学,往往认为它是一门研究人类心理现象及其影响下的精神功能和行为活动的科学,很多情况下,我们的直观印象是把心理学与医学领域进行…

Hadoop三大组件原理详解:hdfs-yarn-MapReduce(第9天)

系列文章目录 一、HDFS读写原理【重点】 二、YARN提交mr流程【重点】 三、MapReduce计算流程【重点】 文章目录 系列文章目录前言一、HDFS读写原理[面试]1、HDFS数据写入解析2、HDFS数据读取解析 二、YARN提交mr流程[面试]1. YARN提交mr过程解析 三、MapReduce计算流程[面试]1…

RK3568技术笔记十四 Ubuntu创建共享文件夹

单击“虚拟机”,单击“设置”,如图所示: 单击“选项”,选择“总是启用(E)”,单击“添加”,如图所示: 单击“下一步”,如图所示: 单击“浏览”添加…

建筑幕墙设计乙级资质申请要点梳理

建筑幕墙设计乙级资质申请要点梳理如下: 一、申请条件 资历和信誉: 企业需具有独立企业法人资格,能够独立承担法律责任。社会信誉良好,无不良记录。注册资本不少于100万元人民币。技术条件: 专业配备齐全、合理&#…

苹果电脑如何清理磁盘空间 苹果电脑如何清理系统数据

你是否遇到过电脑磁盘空间不足的情况呢?Mac电脑有着流畅的操作系统,但是随着日常使用,可能电脑里的垃圾文件越来越多,导致磁盘空间不足,随之会出现电脑卡顿、软件闪退等情况。及时清理磁盘空间可以有效避免电脑这些问题…

java连接kerberos用户认证

文章目录 一、背景二、代码2.1目录2.2配置文件application.properties2.3pom依赖2.4代码AuthProviderConfig配置类CustomConfigurationByKeytab配置类CustomConfigurationByPassword配置类TestControllerMyCallbackHandlerDummyUserDetailsService实现类LdapTest2Application启…

AI播客下载:Possible(OpenAI投资人Reid Hoffman主持)

这是由 LinkedIn 创办人,同时也是 OpenAI 早期投资者 Reid Hoffman。节目上会邀请各领域的专家 (教育、医疗、司法),探讨 AI 对世界的影响。这节目特别有趣的地方,是在 GPT-4 协助下制作的,开创了人机协作内容 。 如果未来一切都能…

Windows10任务栏卡顿解决方案

一、重新启动任务资源管理器 右键底部任务栏选择“任务管理器”;按快捷键“CtrlShiftEsc”;搜索框搜索“任务管理器”并单击“打开”;“WinX”打开开始菜单附属菜单,在列表中选择“任务管理器” ;按下“ctrlaltdelete”…

Linux管道与重定向

管道 是进程通信的方法之一,在Linux中用命令1|命令2的形式表示,将前一个命令的结果作为后续命令的参数进行输入,也有tee管道,可以进行多次筛选,即多次使用|过滤命令。 重定向 文件描述符FD Linux中输入输出分为三种…