Redis缓存与数据库一致性方案

高并发架构系列:Redis缓存和MySQL数据一致性方案详解 面试是跳槽涨薪最直接有效的方式,马上金九银十来了,各位做好面试造飞机,工作拧螺丝的准备了吗?掌握了这些知识点,面试时在候选人中又可以夺目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。目不少,暴击9999点。机会都是留给有准备的人,只有充足的准备,才可能让自己可以在候选人中脱颖而出。[外链图片转存中…(img-CkvNBvGL-1710439499050)][外链图片转存中…(img-lVWLBqKv-1710439499050)]本文已被。 阅读详情

使用Redis缓存的模式的有很多种,下面就逐一介绍。

一、数据库和redis分别处理不同的数据类型

数据库处理要求强一致实时性的数据,例如金融数据、交易数据;
redis处理不要求强一致实时性的数据,例如网站最热贴排行榜;


二、Cache-Aside模式

Cache-Aside模式的意思是业务代码直接维护缓存,这是最常用的一类模式。

2.1 读场景

先从缓存获取数据,如果缓存没有命中,则回源到数据库获取源数据。

将数据放入到缓存,下次即可从缓存中获取数据。

放入缓存的可以是异步的(创建一个新的线程),也可以是同步的,根据实际情况自己选择。


2.2 非高并发情况下的写场景

先将数据写入数据库,写入成功后立即同步将数据写入缓存。


2.3 写多读少的写场景

先将数据写入数据库,写入成功后,将缓存数据过期/删除,下次读取时再加载缓存。

这样的好处是避免了不必要的写缓存操作。


2.4 高并发情况下的写场景

先写缓存,再定期更新数据库:

异步化,先写入redis的缓存,就直接返回;定期或特定动作将数据保存到mysql,可以做到多次更新,一次保存。


三、Cache-As-SoR(Redis不支持)

SoR:system of record,记录系统,或者叫数据源;数据库是数据源的一种。

Cache-As-SoR即把Cache看作SoR,所有操作都是对Cache进行,然后Cache再委托给SoR进行真实的读写。即业务代码中只看到Cache的操作,看不到关于SoR相关的代码。

3.1 Read-Through

业务代码读Cache,如果不命中,由Cache读SoR。使用Read-Through模式需要一个CacheLoader组件来回源到SoR加载数据。Guava Cache和Ehcache 3.X都支持该模式。


3.2 Write-Through

对应Read-Through,需要有一个CacheWriter组件来回写SoR。Guava Cache不支持,Ehcache 3.X支持该模式。


3.3 Write-Behind

与 Write-Through 的区别是,Write-Through是同步写SoR,Write-Behind是异步写,从而可以实现批量写、合并写、延时写和限流。


四、订阅/曾量更新模式

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。

基于日志增量订阅&消费支持的业务:

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引 (卖家和买家各自分库索引)
  4. search build
  5. 业务cache刷新
  6. 价格变化等重要业务消息

4.1 MySQL主备复制原理

redis系列之数据库与缓存数据一致性解决方案 redis系列之数据库与缓存数据一致性解决方案                                                                                   -- 来自中华石杉老师视频 数据库与缓存读写模式策略 写完数据库后是否需要马上更新缓存还是直接删除缓存? (1)、如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以... 阅读详情

相关推荐

【中间件设计 Redis】Redis缓存和MySql如何保持一致,有哪些保持一致性方案

本文深入探讨了缓存与数据库数据一致性的解决方案,重点分析了Cache-Aside模式。主要内容包括: Cache-Aside模式的读写流程:读请求先查缓存再查数据库,写请求推荐先更新数据库再删除缓存。 两种更新策略对比:先更新数据库再删缓存(推荐)仅产生短暂不一致且能自动修复,而先删缓存再更新数据库可能导致长期脏数据。 删除优于更新缓存的理由:避免并发冲突、降低耦合、操作更轻量。 增强方案:对于删除失败风险,建议采用binlog+消息队列实现异步删除。 实践建议:接受最终一致性,优先选择"先更新数

MaoLin Tian's Blog 864

Redis延迟双删详解:缓存与数据库一致性方案的最佳实践

在分布式系统架构中,缓存与数据库的数据一致性是经典难题。Cache Aside模式作为旁路缓存基础,通过更新数据库后删除缓存来保证最终一致性,但并发场景下仍可能出现旧值覆盖。延迟双删在删除基础上增加二次延迟删除,利用时间窗口将不一致概率降至最低。它无需引入复杂中间件,适合读多写少、缓存价值高的业务场景。本文深入解析延迟双删的适用边界、核心原理与工程落地细节,包括延迟时间设置、删除失败重试、以及如何结合版本号与Binlog订阅兜底,帮助你构建高可用的缓存治理方案。

weixin_31102231的博客 134

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

具体选择哪儿种解决方案,要根据具体业务场景、项目的需求,以及整体的架构等多种因素去综合考虑,比如是否是高并发、是否要考虑低延迟等等因素。脱离业务谈技术,就是耍流氓。

大一点的小孩 1763

实现缓存和数据库一致性方案:mysql+canal+rabbitmq+redis

实现缓存和数据库一致性方案:mysql+canal+rabbitmq+redis

技术专家 1904

Redis 与数据库(DB)的数据一致性

核心挑战在于:性能需求: 引入Redis就是为了追求极致的读取性能,因此通常采取“旁路缓存”模式。数据一致性: 任何对数据库的更新,都必须在某个时间点反映到缓存中,否则用户就会读到脏数据。处理一致性的常用策略,按照一致性强度(从弱到强)排列如下:这是最基础和常见的模式。由应用层负责管理缓存。读取流程:读取时,首先查询Redis。命中则返回。未命中则查询数据库,将结果写入Redis,然后返回。更新流程:这是一致性问题的核心,有三种常见写法:先更新数据库,再删除缓存 (推荐): 优点:

闻臻 351

Redis缓存与数据库双写一致性:从原理到实战的完整解决方案

在高并发系统设计中,缓存与数据库的数据一致性是核心挑战之一。Redis 作为常用缓存组件,与 MySQL 等数据库之间的双写操作常因并发交错、删除失败或主从延迟导致脏读。Cache Aside 模式通过先更新数据库再删除缓存,将不一致窗口压缩至最小,而延迟双删、消息队列异步重试以及 Canal 订阅 binlog 等工程手段,可进一步保障最终一致。对于库存扣减等强一致场景,则需引入分布式锁或直接放弃缓存读写。本文从一致性级别划分出发,推演四种读写顺序的优劣,详解延迟双删参数设置、删除失败重试机制,并对比 M

weixin_28308325的博客 222

缓存数据库(Redis)与数据库(Mysql)一致性解决方案

1.数据不一致的业务场景: 以唯一登录为业务场景:在移除令牌成功后,变更令牌可用状态时出现错误导致令牌状态未变更,那么Redis中已经不存在此用户的令牌,而Mysql中存储的上一个用户的令牌状态为可用。那么就会出现这样的情况: 用户带着令牌来访问时由于Redis中不存在就无法访问,于是两个用户均无法访问。一个新的用户密码校验成功后发现这个用户登录过,但是Redis移除出现异常,因为Redi...

程序员精进之路 1343

实战:实现缓存和数据库一致性方案:mysql+canal+rabbitmq+redis

最近不是正好在研究 canal 嘛,刚巧前两天看了一篇关于的文章,里边提到了一种解决方案是结合 canal 来操作的,所以阿Q就想趁热打铁,手动来实现一下。

2301_78526383的博客 1276

分布式系统中,Redis缓存与数据库的双写一致性踩坑避坑

摘要 本文对比分析了五种缓存与数据库一致性解决方案:1)延迟双删通过两次删除缓存实现最终一致,适用于读多写少场景;2)MQ异步通知解耦业务但需处理消息可靠性;3)Canal监听Binlog实现无侵入实时同步;4)分布式锁保障强一致但性能损耗大;5)版本号控制防覆盖更新需业务改造。选型建议:强一致场景用分布式锁+本地消息表,高并发读场景采用多级缓存+MQ异步更新,金融级场景推荐TCC模式。实施需监控缓存命中率、不一致率等指标,并建立跨机房容灾方案。

从技术实践立足,从项目管理方法论延伸思考 723

黑马点评缓存模块复盘:穿透击穿雪崩与一致性实战

Redis作为高性能键值存储,是后端系统提升读取性能的核心组件,而缓存与数据库的一致性、缓存穿透、缓存击穿与雪崩等问题,是工程实践中绕不开的经典挑战。本文从缓存工作原理讲起,梳理旁路缓存模式如何保证数据最终一致,对比缓存空对象与布隆过滤器在穿透场景下的取舍,分析互斥锁与逻辑过期应对热点key击穿的优缺点,并延伸至多级缓存、分布式锁等进阶方案。这些技术广泛适用于电商详情页、热点查询等场景,也是面试中高频考察点。结合黑马点评项目,完整复盘一套可落地的缓存设计思路。

weixin_31155097的博客 224

高并发电商库存合并扣减:Redis+Lua原子性方案与实践

库存扣减是电商后端的高频技术难题,尤其在秒杀和大促场景下,热点SKU的并发请求会让数据库行锁成为瓶颈。分布式缓存作为前置扣减层,配合Lua脚本实现多SKU的原子性合并扣减,能够在毫秒级完成预占操作。其核心原理在于Redis单线程模型保证了脚本执行的不可分割性,同时通过异步落库、消息重试和定时对账机制,确保缓存与数据库的最终一致性。该方案既缓解了数据库压力,又满足了订单级多商品同时扣减的业务要求,广泛应用于购物车结算、秒杀抢购等场景。本文从缓存层设计、Lua脚本逻辑到故障恢复,系统梳理了一套可落地的生产级实践

weixin_34885746的博客 264

分布式系统数据一致性实战:解决缓存与数据库的时空错位问题

在分布式系统与微服务架构中,数据一致性是保障系统正确性的核心挑战。其原理在于,当数据在数据库、缓存等多个副本间流转时,由于网络延迟、并发操作或更新策略不当,会导致各副本状态不一致,即出现“时空错位”。这不仅影响用户体验,更可能引发超卖、脏读等严重业务问题。从技术价值看,解决此问题是构建高可靠、高性能后端服务的基础。常见的应用场景包括电商库存扣减、用户信息同步、实时风控等。本文聚焦于缓存与数据库不一致这一典型场景,深入剖析其根源,并通过实战演示如何利用Cache-Aside模式、Redis及合理的更新策略,确

weixin_34367257的博客 431

Redis缓存与数据库双写一致性解决方案

Redis缓存与数据库双写一致性解决方案 1 需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库! 好了,我们现在引入缓存的概念,那么访问路程变成了如下: 上面这个经典的读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库间的数据一致性问题。 有以下这些不一致的场景: 1.当更新数据时,如更新某商品的库存,当前商品的库存是10

weixin_40055163的博客 743

Redis学习总结(13)——分布式之数据库和缓存双写一致性方案解析!

一、为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作: 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存?又或者是先删除缓存,再更新数据库?其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析,于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。 二、文章结构 ...

科技D人生 1079

智能座舱架构与芯片- (9) 音频篇 上

从A2B收发器衍生出来的简化产品具备各种级别的功能,例如端点从节点(不支持TDM)、简化型主节点(支持较短的电缆和更少的从节点数量),以及简化型端点从节点(支持较短电缆和更少的PDM输入)。例如,AVB中的talker和listener是不同的设备,它们的参考时钟源可能并不相同。传统的车载收音机通过天线接收无线电信号,然后由调谐模块(Tuner)进行信号调谐,信道过滤,信道均衡,多路改善,信号解调等,转为数字信号后再交给DSP进行立体声解码,噪声抑制,弱信号处理,最后从车载音响系统进行播放。

joanna_xiao的博客 4904

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

微信小程序转化数据API自归因实战:PHP实现与2025升级要点解析

本文详细解析了2025年微信小程序转化数据API自归因的升级要点与PHP实战实现。核心变化包括接口地址更新、固定access_token的获取方式,以及新增timestamp与nonce等安全参数。文章提供了完整的PHP代码示例,帮助开发者高效完成数据上报,优化腾讯广告投放效果。

git9versioner的博客 989

【MM小贴士】关于SAP系统中关税的处理方式

的运费,这部分来讲,我们关税的计价基础,就应该是货物价值+包邮到中国港口的运费,完后进行报关操作,缴纳关税,后半段从中国港口拉回到企业里面的运输费,就会做到费用里面去,而不是计入到存货成本。1、我们自己的企业和国外厂家A购买一项物资,厂家A的报价会分成几个组成部分货物本身的价值或者货物本身的价值+到国外港口的运费或者货物本身的价值+到中国港口的运费或者货物本身的价值+包邮到你们自己企业的整体运费。所以我的关税就是不确定的。重点是运费是哪一段的运费,如何结算,结算的货币,何时能够确定运费。.........

竹大的博客 9025

【实战】ComfyUI-Impact-Subpack插件安装与UltralyticsDetectorProvider节点修复全流程

本文详细解析了ComfyUI中UltralyticsDetectorProvider节点缺失的原因,并提供了完整的ComfyUI-Impact-Subpack插件安装与修复全流程。核心在于Impact Pack插件架构调整导致节点被拆分至子插件包。指南涵盖手动安装、依赖安全配置、模型文件管理及深度排错步骤,帮助用户彻底解决节点缺失问题,恢复工作流正常运行。

weixin_29290947的博客 437

【STM32项目】基于STM32设计的震动马达超声波电机高频震动——高级定时器PWM互补输出带死区控制__资料编号3

实现高级定时器互补输出带死区控制,实现震动/超声波电机/马达,高频震动。使用 STM32F103 芯片输出两路互补 PWM,并带有死区和刹车控制功能。定时器 1 通道 1 及其互补通道输出PWM,且带死区控。当定时器 1 的刹车输入引脚被拉高时,产生刹车时间,即定时器 8 停止输出 PWM。当刹车输入引脚被拉高时,通道 1 和通道 2 将从有波形输入状态转换成无效电平状态。

嵌入式阿齐Archie 6742

深度强化学习在足式机器人中的应用 (一):基础原理与仿真环境

我们将首先深入探讨其背后的核心挑战与技术栈,然后详细推导机器人学和强化学习的基本数学原理,特别是剖析在机器人控制领域表现卓越的PPO算法。下面的独立Python脚本展示了Isaac Gym的基本API用法,加载一个Go1机器人(假设URDF已准备好),并让它执行一个简单的预设动作(正弦波运动),以此来熟悉仿真流程。:代码的核心是直接操作GPU上的PyTorch张量,避免了CPU和GPU之间的数据拷贝,这是实现高性能的关键。:所有计算(如伪策略中的正弦波计算)都应该是向量化的,一次性为所有。

VectorShift的博客 228

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1239

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: MySQL的跨库join
下一篇: Canal介绍与应用
奋起直追CDS
博客等级 码龄11年 57粉丝 94原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值