怎么保证缓存与数据库的最终一致性?

news2025/1/24 17:40:02

目录

零.读数据的标准操作

一.Cache aside Patten--旁路模式

二.Read/Write Through Pattern--读写穿透

三.Write Back Pattern--写回

四.运用canal监听mysql的binlog实现缓存同步


零.读数据的标准操作

这里想说的是不管哪种模式读操作都是一样的,这是一种统一的规范:

但写操作和同步策略却有不同。

一.Cache aside Patten--旁路模式

这个是最常见的模式。运用于读多写少的情况。

1.为什么采用更新而不是删除
更新缓存:每次更新数据库都更新缓存,无效写操作较多
删除缓存:更新数据库时让缓存失效,查询时再更新缓存
2.我们应当是先操作数据库,再删除缓存,而不应该反过来

原因在于,如果你选择第一种方案,在两个线程并发来访问时,假设线程1先来,他先把缓存删了,此时线程2过来,他查询缓存数据并不存在,此时他写入缓存,当他写入缓存后,线程1再执行更新动作时,实际上写入的就是旧的数据,新的数据被旧数据覆盖了。 

二.Read/Write Through Pattern--读写穿透

Write-Through的潜在使用场景是银行系统。

Write-Through适用情况有:

        需要频繁读取相同数据

        不能忍受数据丢失(相对Write-Behind而言)和数据不一致

在使用Write-Through时要特别注意的是缓存的有效性管理,否则会导致大量的缓存占用内存资源。甚至有效的缓存数据被无效的缓存数据给清除掉。

三.Write Back Pattern--写回

在更新数据的时候,先更新缓存,再异步批量更新数据库。

适合读多写多的操作,如果采用Cache Aside Pattern,由于更新的频繁,也频繁删除缓存。读操作如果很少命中缓存,缓存也失去了意义。

Write Behind Pattern优点是效率很高,数据库压力很小,将数据库的读和写操作多落在缓存上。

缺点是异步增大了数据库和缓存无法强一致的概率。比如说当过期的时候去读取,可能使得同一时间点赞或者取消点赞的数据更改并没有同步到缓存。一般结合前端缓存进行优化用户体验。适用于对数据一致性要求不那么高的场景,比如高并发下的点赞和收藏,还有浏览量等场景。

四.运用canal监听mysql的binlog实现缓存同步

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

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

相关文章

MongoDB初探:安装与图形化界面保姆级使用指南

文章目录 前言一、MongoDB下载安装下载解压配置环境变量打开mongoDB 二、配置本地MongoDB服务创建文件下载服务测试服务 三、图形化界面Compass GUINavicat GUI 总结 前言 MongoDB是一种流行的开源、面向文档的NoSQL数据库程序。与传统的关系型数据库不同,MongoDB将…

微信小程序备案指南及注意事项

如何备案小程序? 原文可参考: 微信小程序备案指南及注意事项 注意:备案需要提前准备好以下材料; 身份证正反面照片(必须);营业执照照片(非个人主体需要); 一…

非机构化解析【包含PDF、word、PPT】

此项目是针对PDF、docx、doc、PPT四种非结构化数据进行解析,识别里面的文本和图片。 代码结构 ├── Dockerfile ├── requirements ├── resluts ├── test_data │ ├── 20151202033304658.pdf │ ├── 2020_World_Energy_Data.pdf │ ├── …

AI大模型下的策略模式与模板方法模式对比解析

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI大模型下…

【C++入门】缺省参数、函数重载与引用

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

Severt和tomcat的使用(补充)

打包程序 在pom.xml中添加上述代码之后打包时会生成war包并且包的名称是test 默认情况打的是jar包.jar里量但是tomcat要求的是war包. war包Tomcat专属的压缩包. war里面不光有.class还有一些tomcat要求的配置文件(web.xml等)还有前端的一些代码(html, css, js) 点击其右边的m…

WPS二次开发系列:WPS SDK实现文档打印功能

在办公场景或者家教场景中经常碰到需要对文档进行打印的能力,今天给大家带来一篇如何通过WPS SDK调用WPS打印接口实现文档打印能力 最终实现效果图 实现步骤 2.1. 申请集成资料 通过向WPS官方发送邮件申请,审批通过后即可获取集成相关资料,详…

数据备份的演变:数字时代的一个关键方面

微信关注获取更多内容 数据备份至关重要,涵盖了其过去、现在和未来,是数字时代任何企业运营的一个重要方面。 如今,公司运营的几乎每个方面,从客户信息到内部财务数据,都以数字方式存储。 有鉴于此,数据…

视频压缩软件都有哪些?分享4款专业的视频软件!

在数字化时代,视频已经成为我们生活中不可或缺的一部分。然而,随着视频质量的不断提升,其占用的存储空间也在迅速增长。为了解决这个问题,视频压缩软件应运而生。本文将为您介绍几款热门的视频压缩软件,帮助您选择最适…

后端nginx使用set_real_ip_from获取用户真实IP

随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址. 前言:Nginx ngx_http_realip_module…

JVM—对象的创建流程与内存分配

JVM—对象的创建流程与内存分配 创建流程 对象创建的流程图如下: 对象的内存分配方式 内存分配的方式有两种: 指针碰撞(Bump the Pointer)空闲列表(Free List) 分配方式说明收集器指针碰撞&#xff08…

flutter升级3.10.6Xcode构建报错

flutter sdk 升级Xcode报错收集,错误信息如下: Error (Xcode): Cycle inside Runner; building could produce unreliable results.没问题版本信息: Xcode:15.3 flutter sdk :3.7.12 dart sdk:2.19.6 …

hadoop分布式计算组件

什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果 分布式计算:多台服务器协同工作,共同完成一个计算任务 分布式计算常见的2种工作模式 分散->汇总(MapReduce就是这种模式)中心调…

《价值》-张磊-高瓴资本-5-投资是一场修行;坚持第一性原理;避开陷阱;信誉就是生命

第五章:价值投资者的自我修养 价值投资不是投资者之间的零和游戏,而是共同把蛋糕做大的正和游戏。 从事投资的过程中,我渐渐发觉,投资 一方面是对真理的探寻,探索外部世界;另一方面是谋求心灵的宁静&#x…

Java: LinkedList的模拟实现

一、双向链表简介 上一篇文章我介绍了单向链表的实现,单向链表的特点是:可以根据上一个节点访问下一个节点!但是,它有个缺点,无法通过下一个节点访问上一个节点!这也是它称为单向链表的原因。 那么&#x…

K8S - Service简介和 1个简单NodePort例子

大纲图 流量方向 如上图, 当用户or 别的service 从k8s 集群外部访问 集群内的services 流量方向有两种 一种是垂直方向, 通过域名 -> Load Balancer -> gateway -> services , 在k8s 一般是通过ingress 来实现, 而ingress 不是本文…

免费https详细教程

简单叙述一下https的定义和实现https的一些基本作用,然后会给到申请SSL证书的方式以及安装部署流程,最终实现网站的https访问。 随着互联网的快速发展,网络安全问题日益凸显。在互联网上传输敏感信息、进行在线交易和共享个人数据时&#xf…

万界星空科技生产工时管理系统

生产工时管理系统是一个管理系统,生产管理人员可以详细地、逐项活动地查看生产和即时劳动力数据,特别是活动级劳动力信息,辅助生产管理人员利用从车间获得的效率数据,实时监控生产流程,并在提高生产率,控制…

TLF9471 V33 WK/ VSENSE

1 WK/VSENSE 输入框图 TLF9471实现以下唤醒源: Static Sense:WK/VSENSE输入和/或GPIO WK输入作为尾流源永久激活,即WK/VSENSE输入和/或GPIO WK输入作为尾流源永久激活。Cyclic Sense:WK/VSENSE输入仅在循环感知周期的开启时间内激活。内部定时器在接通时激活GPIO HS,用于感…

C语言开发实战:使用EasyX在Visual Studio 2022中创建井字棋游戏

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…