缓存数据库同步策略

缓存同步、缓存穿透、缓存击穿、缓存雪崩 缓存同步、缓存穿透、缓存击穿、缓存雪崩 目录 一、缓存同步 1、数据实时同步 2、数据同步 3、任务调度更新 4、binlog日志订阅 二、缓存穿透 三、缓存击穿 四、缓存雪崩一、缓存同步 缓存同步问题:​编辑切换为居中添加图片注释,不超过 140 字(可选)1、数据实时同步 这种数据同步是增量、主动、强一致性。​编辑切换为居中添加图片注释,不超过 140 字(可选)​编辑切换为居中添加图片注释,不超过 140 字(可选)2、数据准时同步 这种数据同步是增量、被动、准确性。​编辑切换为居中添加图片注释,不超 阅读详情

在我们的项目中,修改数据后,考虑缓存数据更新的及时性,我们可能会采用主动更新缓存的策略。主要有如下几种策略:

  1. 先更新缓存,再更新数据库
  2. 先更新数据库,再更新缓存
  3. 先删除缓存,再更新数据库,访问时按需加载数据到缓存中
  4. 先更新数据库,再删除缓存,访问时按需加载数据到缓存中

上面4中策略我们应该怎么选择呢?已下我们就逐一分析这4中策略:

“先更新缓存,再更新数据库” 策略不可行。数据库设计负责,压力集中,数据库因为超时等原因,操作失败的可能性会很大。此外还会涉及到事务,很有可能因为数据库更新失败,导致缓存和数据库的数据不一致。

“先更新数据库,在更新缓存” 策略不可行。以试,如果A和B两个线程先后完成数据库更新,但是更新缓存时是B和A的顺序,那么可能旧数据更新到缓存中引发缓存和数据库数据不一致;二是,我们不确定缓存中的数据是否会被再次访问,不一定要把所有数据都更新到缓存中去。

“先删除缓存,再更新数据库,访问时按需加载数据到缓存中” 策略也不可行。并发的情况下,很有可能删除缓存后还没有来得及更新数据库,就有另外一个线程读取了旧值到缓存中,如果并发量很大的话这个概率也会很大。

“先更新数据库,再删除缓存,访问时按需加载数据到缓存中” 策略是最好的。虽然在极端的情况下,这个策略也可能会出现数据不一致的问题,但概率非常低,基本上可以忽略。举一个“极端情况”的栗子,比如更新数据的时间点刚好是数据缓存失效的瞬间,这时A先读取到一个旧值,随后在B操作数据库完成更新并且删除了缓存之后,A再把旧值加入到缓存。

需要注意的是,更新数据库后删除缓存的操作可能失败,如果失败则考虑把任务加入到延迟队列进行延迟重试,确保数据可以删除,缓存可以及时更新。因为删除操作时幂等的,所有即使重复删除问题也不是太大,这又是删除比更新好的一个原因。

因此,针对缓存更新更推荐的方案是,缓存中的数据不由数据更新操作主动触发,统一在需要使用的时候按需加载,数据更新后及时删除缓存中的数据即可。

跨数据库 JOIN 性能优化:数据冗余设计、ETL 同步策略及结果集缓存的实操配置步骤 摘要:本文系统探讨了企业级系统中跨数据库JOIN操作的性能优化方案。针对跨库JOIN存在的网络传输、分布式事务、异构数据库等核心性能瓶颈,提出了三大优化策略:数据冗余设计通过字段冗余将跨库查询转为单库操作;ETL同步策略实现非实时场景的数据聚合;结果集缓存技术加速高频查询响应。文章详细阐述了各方案的适用场景、实施步骤及注意事项,并提供了性能提升预期和综合方案选择指南。通过这三种方法的灵活组合应用,可有效解决跨库JOIN的性能问题,在保证业务需求的同时实现最优的系统性能。 阅读详情

相关推荐

如何保证缓存和数据库一致性

在实际应用中,需要根据系统的业务需求、数据特点和性能要求等因素综合考虑,灵活运用各种技术手段,不断优化数据同步机制,以适应不断变化的业务环境和技术发展趋势。使用数据库更新通知机制,当数据库中的数据发生变化时,发送通知给缓存系统,从而及时更新缓存中的数据。:这种方法可能导致缓存中的数据成为脏数据,因为如果数据库更新失败,缓存中的数据将不一致。:先更新数据库,再删除缓存,禁止本链路再次查询该数据,防止缓存未删除时查询到旧数据。:这种方法可能导致缓存中的数据滞后,因为如果缓存更新失败,缓存中将保留旧数据。

weixin_42083481的博客 1923

缓存同步策略

缓存同步策略 缓存数据同步的常见方式有三种: 设置有效期 给缓存设置有效期,到期后自动删除。再次查询时更新。 - 优点:简单,方便。 - 缺点:时效性差,缓存过期之前可能不一致。 - 场景:更新频率较低,时效性要求低的业务。 同步双写 在修改数据库的同时,直接修改缓存。 - 优点:时效性强,缓存与数据库强一致。 - 缺点:有代码侵入,耦合度高。 - 场景:对一致性,时效性要求较高的缓存数据。 异步通知 修改数据库时发送事件通知,相关服务监听到通知后修改缓存数据。 - 优点:低耦合,可以同时通知多个缓存服务

mah888的博客 1305

Redis 缓存自动更新策略与数据库同步

总结起来,通过封装缓存和数据库操作,并在更新数据时保持两者的同步,我们可以实现一种自动更新 Redis 缓存的策略,保证缓存中的数据始终与数据库保持一致。需要注意的是,上述示例代码只是一种简化的演示,实际应用中可能需要处理更复杂的情况,比如处理并发更新、设置缓存过期时间等。方法中,首先尝试从缓存中获取数据,如果缓存中没有,则从数据库中获取数据,并将数据存储到缓存中。一种常用的策略是将缓存和数据库的操作封装在一个统一的接口中,以确保数据的一致性。方法中,我们先更新数据库中的数据,然后再更新缓存中的数据。

BitNetT的博客 166

Redis缓存更新和同步策略、缓存穿透、缓存击穿、缓存雪崩

方法来表示获取锁,该方法含义是 redis 中如果没有这个key,则插入成功,返回1,在 stringRedisTemplate 中返回true, 如果有这个key则插入失败,则返回0,在stringRedisTemplate返回false,我们可以通过true,或者是false,来表示是否有线程成功插入key,成功插入的key的线程我们认为他就是获得到锁的线程。当代计算机最大的问题是 cpu性能提升了,但内存读写速度没有跟上,所以为了适应当下的情况,增加了cpu的L1,L2,L3级的缓存。

qq_62767608的博客 3610

【手写数据库内核组件】0301 缓存模型介绍,缓存分层架构与缓存映射算法,以及缓存淘汰替换算法,同步一致的策略

缓存这一组件,在高性能软件中是个必选项,当然数据库中也是必不可少的模块。 缓存有各种各样的实现方式,尤其缓存的替换算法孰好孰劣,比较不断。 针对不同的数据,用途,在数据库中有多种形式的缓存,本文就来介绍数据库中用到的缓存形式。

一个追逐梦想的码农 2834

缓存一致性问题与解决方案

在高并发下,由于时许的问题导致缓存中的数据与数据库中的数据不一致那么我们应该如何解决呢? 1、 锁能解决这种问题吗,不行为什么呢。 锁解决的是竞争问题。 2、单纯的消息中间件能解决吗,中间件可以保证时序,但是不能判断是否存在该消息 3、数据库的事务是否能解决呢? 事务解决的也是数据一致性的问题(业务层与数据库层面的一致性),看来这个也跟数据库的事务没有关系。 4、我们可以采用队列来实现,read的时候判断当前队列中是否存在删除操作,如果存在直接等待,如果没有直接执行,这个看样子是可以解决问题,当前这样会出现大量的线程阻塞、有可能还是出现timeout。

查询缓存实现、缓存更新策略选择、解决缓存穿透&缓存雪崩&缓存击穿问题

缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据例 1 : Static final ConcurrentHashMap < K , V > map = new ConcurrentHashMap < >();// 本地用于高并发 例 2 : static final Cache < K , V > USER_CACHE = CacheBuilder . newBuilder() . build();

coderge's 优快云 Blog. 768

IWR6843ISK+DCA1000EVM 本人遇到的所有报错和解决方案

本文详解了初次使用DCA1000EVM和mmave studio遇到的一系列的问题以及解决方法

2301_77883976的博客 3311

数据库与缓存数据同步

数据同步策略、安装Canal、监听Canal

weixin_44205136的博客 775

深入解析docx4j:从Word到PDF的高保真转换实战

本文深入解析了如何使用纯Java开源库docx4j实现Word到PDF的高保真转换。针对中文环境,重点讲解了字体映射原理、Linux服务器字体部署方案,并提供了完整的代码示例和配置方法。同时,文章涵盖了表格、图片处理、性能优化及生产环境部署指南,帮助Java开发者构建稳定、可控的文档转换服务。

weixin_29237635的博客 674

S32K144 LPI2C Master/Slave模式配置与多设备通信实战

本文详细介绍了NXP S32K144微控制器中LPI2C模块的主从模式配置与多设备通信实战。内容涵盖硬件连接、引脚配置、主从模式深度设置、中断/DMA应用,并通过AT24C16 EEPROM、SHT30传感器等实例,解析了多设备通信中的地址切换、时序控制及常见问题排查技巧,帮助开发者高效实现基于LPI2C的稳定通信。

weixin_29158047的博客 269

redis缓存与数据库同步策略

如何保证缓存(Redis)与数据库(MySQL)的一致性?对于热点数据(经常被查询,但不经常被修改的数据),我们一般会将其放入 Redis 缓存中,以增加查询效率,但需要保证从 Redis 中读取的数据与数据库中存储的数据 终是一致的,这就是经典的缓存与数据库同步问题。那么,如何保证缓存(Redis)与数据库(MySQL)的一致性呢?根据缓存是删除还是更新,以及操作顺序大概是可以分为下面四种情况:1.先更新数据库,再更新缓存2.先更新缓存,再更新数据库3.先删除缓存,再更新数据库。

ray的博客 1489

遥感图像小白--2--图像分割

遥感图像分割基础入门

Mary的博客 4237

Java缓存一致性实战策略(从Redis到数据库同步全解析)

掌握Java缓存一致性方案,解决Redis与数据库同步难题。适用于高并发场景,结合双写一致、失效策略与分布式锁,保障数据实时准确。高效稳定,值得收藏。

FastDebug的博客 861

QCC51XX---人机接口设备协议( HID)

QCC51XX---人机接口设备协议( HID)

weixin_42162924的博客 820

华为OD机试 - 猴子吃桃 - 二分查找(Java 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 3850

缓存与db一致性问题

缓存和数据库架构: 主流方案:用数据service屏蔽缓存和db,读写都走service 非主流方案:异步缓存更新,通过binlog 一缓存与db一致性问题     原则:先淘汰缓存,再修改db。如果使用更新缓存在修改DB的方案不会出现下列问题     缓存+主库:     缓存+主从:双淘汰法(同步,异步timer,binlog分析) 二db主从一致性问题    不一致原因,主从

terranhu的博客 912

SAP-ABAP:FI财务会计模块常用BAPI及核心用途实例说明

SAP FI模块的BAPI覆盖了从主数据管理、凭证过账到财务关账的全流程操作,是系统集成与自动化的重要工具。实际应用中需结合业务场景选择合适的BAPI,并严格遵循事务控制与校验规则。如需扩展功能,可通过BAdI或用户出口增强标准逻辑。

baidu_35680696的博客 1601

缓存与数据库的数据同步机制失效的处理策略

本文总结了四种缓存更新策略:1)先删缓存再更新数据库,适合读多写少场景;2)先更新数据库再删缓存,适合写操作不频繁场景;3)双写模式和读写锁,适用于强一致性要求;4)最终一致性方案,包括异步更新和版本号控制。针对不同场景提供了推荐方案:读多写少场景优先保证读性能,强一致性场景避免脏数据,高并发场景平衡性能与一致性。最后强调应设置缓存过期时间、校验机制和分布式锁等兜底措施,确保系统健壮性。

废柴重生之我要当大佬 425

【YOLO26实战全攻略】09——YOLO26多目标跟踪实战宝典:从原理到智慧园区人流统计全流程

多目标跟踪(MOT)是视频分析的核心技术,解决了单帧检测无法关联目标身份的痛点。本文基于YOLO26轻量化检测模型与ByteTrack跟踪算法,从新手视角出发,系统讲解多目标跟踪的核心原理、环境搭建、实操步骤与工程落地。内容涵盖ByteTrack分层关联策略解析、YOLO26集成跟踪的一行代码实现、配置参数调优、区域计数、轨迹数据提取与热力图可视化,最终通过智慧园区人车流量统计虚拟案例,完整呈现从技术原理到实际应用的全流程。本文注重实用价值,所有代码可直接复现,参数配置附带场景化建议,帮助新手快速上手。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 356

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

db与缓存不一致的问题

db和缓存的先后问题在日常代码中是很常见的,现在来分析一下每种情景的细节 首先排除定时删除缓存的这种操作,因为这样不会有双写问题。 因为不管有多少线程, (1)缓存没失效的时候都是走的缓存; (2)然后缓存在某一时刻失效时,线程A先到,发现缓存失效,从DB里面去读,此时读的都是最新的值。 (3)即使在(2)中,正好遇到别的线程B更新db的值,若A在更新之前读,并写入缓存,那这一波仍然用的...

gq0811的博客 1003

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

分布式系统(一)数据库和缓存一致性

redis mysql 数据一致性 缓存一致性

weixin_44244088的博客 312

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

yml 配置db_Soul高可用网关:配置缓存三大同步策略

点击上方“后端技术精选”,选择“置顶公众号”技术文章第一时间送达!来源:shuaiqiyumy.oschina.net/shuaiqiyu/blog/3083784前言网关是流量请求的入口,在微服务架构中承担了非常重要的角色,网关高可用的重要性不言而喻。在使用网关的过程中,为了满足业务诉求,经常需要变更配置,比如流控规则、路由规则等等。因此,网关动态配置是保障网关高可用的重要因素。那么,...

weixin_39908082的博客 217

mysql数据库击穿_缓存穿透、击穿、雪崩区别和解决方案

自强学堂文中的cache指缓存,比如redis,db指数据库,比如mysql。一、缓存的三种模式这里主要指的是应用代码对 cache 和 db 中数据的维护方式。1.1 应用代码同时更新 cache 和 dba)数据写入流程b)数据读取流程1.2 应用代码只更新 cache,cache 负责同步更新 db此时可以将 cache 和 db 看成一个整体,db 自己维护 cache。1.3 应用方代码...

weixin_33643798的博客 2044

缓存与数据库存取同步

// 判断是否有缓存 if (cached) { // 直接返回缓存内容 return cachedValue; } // 开始同步 synchronized (lock) { // 再次判断,避免在等待同步锁的过程中,别人已经先行一步读取了DB if (isThisTimeCached) { return cached; ...

人生的意義在於修煉!修煉之路~ 127

MySQL缓存策略(一致性问题、数据同步以及缓存故障)

从mysql 执行出发:第一种:即时执行 ,第二种:预编译执行(prepare)(可以直接跳过句法分析、优化器等步骤,执行速度更快) 引入缓存cache 为了解决mysql的读写性能(磁盘io较慢)问题,增加了缓存数据库,主要用于缓存用户的热点数据(内存访问的速度相比磁盘快很多)。 mysql是主要数据库,数据主要依据 cache缓存用户的热点数据 mysql中的缓冲池和这里的缓存的区别? mysql中也有缓冲池,但是它存储的mysql的索引等数据,是mysql内部的热点数据。 这里的缓存cache是为.

菊头蝙蝠的博客 2434
上一篇: datafaker(大批量生成测试数据)windows安装教程
下一篇: Redis支撑秒杀场景应用
fansenjun
博客等级 码龄11年 21粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值