双写一致性

双写一致性

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

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

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

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

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

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

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

延迟双删:

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

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

分布式锁:

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

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

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

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

基于MQ的异步通知:

基于Canal的异步通知:

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP FICO 下载文件报错【调用数据提供商错误】

报错如下图所示: 解决办法: 当弹出保存文件的提示时,不要点击“记住我的决定”

qemu 安装ubuntu22.04虚拟机 -纯命令行-可ssh-带网络-编译安装 linux kernel-编译安装 kernel module

1,预备系统盘数据 1.1 下载光盘 注意需要 liver-server $ wget https://releases.ubuntu.com/22.04.4/ubuntu-22.04.4-live-server-amd64.iso 1.2 挂载并拷贝 $ sudo mkdir /mnt/iso_ubuntu-22.04.4-live-server-amd64 $ sudo mount ubuntu-22.04.4-live-ser…

蔚来汽车AI算法工程师,如何理解注意力?

大家好啊,我是董董灿。 今天分享一个上海蔚来汽车的AI算法岗位面试经验总结帖,面试岗位为算法工程师。 这次面试提到的问题,除了与实习相关内容和反问之外,面试官总共问了8个问题,主要集中在深度学习基础概念的理解上…

不见五陵高管墓,无花无酒锄做田

不见五陵高管墓,无花无酒锄做田 Golang 通用代码生成器仙童 2.4.0 电音仙女尝鲜版七已发布,此版本测试修复了 PostgreSQL 数据库自动反射功能。此版本更新修复了前端代码生成器,并修复了前端多对多界面的缺陷。PostgreSQL 的数据库反射功能刚…

ubuntu访问windows共享文件夹

方法: Ubuntu访问Windows共享文件夹的方法-CSDN博客 基于交换机的PC端网络通信_服务器交换机pc端-CSDN博客 补充说明: 在这里面输入: smb://192.168.0.30/WindowsShareToLinux

【Effective Web】常见的css布局方式--三栏布局

常见的css居中方式–三栏布局 第一种实现&#xff1a;table布局&#xff08;不推荐&#xff09; 缺点&#xff1a;在table加载前&#xff0c;整个table都是空白的&#xff0c;且修改布局排版都十分困难 <table class"container"><td class"left"…

Linux 软链接

# 语法 ln -s <文件夹or文件的真实路径> <自定义路径别名> # 例子 ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ens33

Flutter 实现软鼠标

文章目录 前言一、如何实现&#xff1f;1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时&#xff0c;有可能遇到drm鼠标无法使用的情况&#xff0c;但鼠标事件却可以正常接收&#xff0c;此时如果…

基于SSM+Jsp的水果销售管理网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

关于椭圆的方程(有Python画的动图)

关于椭圆的方程&#xff08;有Python画的动图&#xff09; flyfish 几何定义 椭圆是平面上所有到两个固定点&#xff08;焦点&#xff09;的距离之和为常数的点的集合。这两个固定点叫做焦点。 解析几何描述 设椭圆的两个焦点为 F 1 F_1 F1​ 和 F 2 F_2 F2​&#xff…

【论文笔记】The Power of Scale for Parameter-Effificient Prompt Tuning

题目: The Power of Scale for Parameter-Effificient Prompt Tuning 来源: EMNLP 2021 模型名称: Soft-Prompt 论文链接: https://aclanthology.org/2021.emnlp-main.243/ 项目链接: https://github.com/google-research/prompt-tuning 核心&#xff1a;针对不同的任务设计不同…

【笔记】打卡01 | 初学入门

初学入门:01-02 01 基本介绍02 快速入门库处理数据集网络构建模型训练保存模型加载模型打卡-时间 01 基本介绍 MindSpore Data&#xff08;数据处理层&#xff09; ModelZoo&#xff08;模型库&#xff09; MindSpore Science&#xff08;科学计算&#xff09;&#xff0c;包含…

视频融合共享平台LntonCVS视频监控安防系统运用多视频协议建设智慧园区方案

智慧园区&#xff0c;作为现代化城市发展的重要组成部分&#xff0c;不仅推动了产业的升级转型&#xff0c;也成为了智慧城市建设的核心力量。随着产业园区之间的竞争日益激烈&#xff0c;如何打造一个功能完善、智能化程度高的智慧园区&#xff0c;已经成为了业界广泛关注的焦…

MacOS设备远程登录配置结合内网穿透实现异地ssh远程连接

文章目录 前言1. MacOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接MacOS3.1 MacOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接MacOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

感恩的力量!美洲杯魔幻提前预告 阿根廷 ——早读(逆天打工人爬取热门微信文章解读)

梅西还能不能提&#xff1f; 引言Python 代码第一篇 洞见 感恩的力量&#xff08;深度好文&#xff09;第二篇 视频新闻结尾 引言 早上早起 昨天晚上1点多才睡 这几天都是 明明很早就准备上床睡觉 但是就是忍不住 吃根雪糕 喝个小饮料 看看最近的欧洲杯比赛 卒 真的是拖延症十…

【总结】ui自动化selenium知识点总结

1. 大致原理 首页安装第三方库selenium库&#xff0c; 其次要下载好浏览器驱动文件&#xff0c;比如谷歌的 chromedriver.exe&#xff0c;配置上环境变量。 使用selenium的webdriver类去创建一个浏览器驱动对象赋值叫driver&#xff0c;一个浏览器驱动对象就可以 实现 对浏…

python爬虫之selenium自动化操作

python爬虫之selenium自动化操作 需求&#xff1a;操作淘宝去掉弹窗广告搜索物品后进入百度回退又前进 selenium模块的基本使用 问题&#xff1a;selenium模块和爬虫之间具有怎样的关联? 1、便捷的获取网站中动态加载的数据 2、便捷实现模拟登录 什么是selenium模块&#x…

【python】PyQt5初体验,窗口等组件开发技巧,面向对象方式开发流程实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

文件扫描工具哪个好?便捷的文件扫描工具推荐

对于初入职场的大学毕业生&#xff0c;申请就业补贴是一项不可忽视的福利。 它不仅能够为新生活带来经济上的缓解&#xff0c;也有助于职业生涯的顺利起步。面对申请过程中需提交的文件&#xff0c;如纸质劳动合同&#xff0c;不必烦恼。市面上众多文件扫描软件能助你一臂之力…