当前位置: 首页 > news >正文

【redis使用场景——缓存——双写一致性】

redis使用场景——缓存——双写一致性

  • 双写一致性问题的本质与场景
  • 典型不一致场景分析
    • ​​并发写操作导致的不一致​​
    • ​​读写交叉导致的不一致​​
    • ​​主从同步延迟导致的不一致​​
  • 解决
    • 延迟双删策略(推荐)
      • 优点​​:
      • ​​缺点​​:
    • 分布式读写锁方案
      • 优点​​:
      • ​​缺点​​:
  • 消息队列异步补偿

双写一致性问题的本质与场景

双写一致性指的是当修改数据库数据时,也需要同步更新缓存数据,确保缓存和数据库的数据保持一致。这一问题在高并发场景下尤为突出,据统计,电商大促期间因缓存不一致导致的订单异常可达总故障的37%。

典型不一致场景分析

​​并发写操作导致的不一致​​

线程A更新数据库为100,开始更新Redis时出现卡顿
线程B更新数据库为80,并成功更新Redis为80
线程A恢复后继续更新Redis为100
最终结果:MySQL=80,Redis=100,数据不一致

​​读写交叉导致的不一致​​

线程A更新数据库为99
线程B从Redis读取旧值100
线程A删除Redis缓存
最终用户B获得过期数据

​​主从同步延迟导致的不一致​​

主库更新后立即删除Redis缓存
从库尚未同步最新数据
查询请求从从库读取旧数据并回填Redis
导致Redis中保留旧数据

解决

延迟双删策略(推荐)

在更新数据库前后各删除一次缓存,第二次删除采用延迟方式(​​考虑到主从同步延迟​​和​​并发读写竞争​​)

优点​​:

  • 实现相对简单
  • 性能影响较小
  • 保证最终一致性

​​缺点​​:

  • 无法保证强一致性
  • 延迟时间难以精确设定(需考虑主从同步时间)
  • 吞吐量会降低
  • ​​适用场景​​:允许数据短暂不一致、对性能要求较高的场景,如文章浏览量更新

分布式读写锁方案

​​核心思想​​:通过读写锁控制并发访问,读操作加读锁,写操作加写锁

优点​​:

  • 保证强一致性
  • 从根源避免读写并发问题

​​缺点​​:

  • 性能影响较大(吞吐量可能下降40%-60%)
  • 代码侵入性强
  • 锁竞争可能导致延迟
  • ​​适用场景​​:金融交易、账户余额等对一致性要求极高的系统

消息队列异步补偿

​​核心思想​​:通过消息队列(MQ)保证缓存操作最终执行

数据库 → Binlog → 消息队列 → 缓存更新Worker → Redis

http://www.lqws.cn/news/482743.html

相关文章:

  • 算法 : 把数字翻译成字符串
  • react day.js使用及经典场景
  • 掌握C++核心特性
  • UI TARS 和 Magentic-UI的区别和差异
  • Java面试复习指南:基础、多线程、JVM、Spring、算法精要
  • 飞轮储能VSG控制策略辅助双馈风机一次调频的仿真模型研究
  • RL 基础 (CH3,动态规划)
  • Dify 1.4.3技术研究报告:新一代AI应用开发平台的核心优势与行业实践
  • 【PyTorch项目实战】CycleGAN:无需成对训练样本,支持跨领域图像风格迁移
  • 稳压二极管“漏电流”的动态电阻效应
  • 【编程语言】javascript、java、go对比应用场景
  • 9大策略深度解析MySQL多表JOIN性能优化
  • BERT 模型准备与转换详细操作流程
  • Bytemd@Bytemd/react详解(编辑器实现基础AST、插件、跨框架)
  • Macbook M4芯片 MUMU模拟器安装使用burpsuit抓包教程APP
  • WEB3合约开发以太坊中货币单位科普
  • 应急推进器和辅助推进器诊断函数封装
  • 媒体AI关键技术研究
  • linux----------------进程VS线程
  • 零基础学习Redis(14) -- Spring中使用Redis
  • RA4M2开发IOT(9)----动态显示MEMS数据
  • 深入理解Spring MVC:构建灵活Web应用的基石
  • 【SQL语法汇总】
  • Python 商务数据分析—— NumPy 学习笔记Ⅰ
  • 由浅入深详解前缀树-Trie树
  • 数智管理学(二十四)
  • Flink Connector Kafka深度剖析与进阶实践指南
  • ELMo 说明解析及用法
  • Netty Channel 详解
  • 【递归,搜索与回溯算法】记忆化搜索(二)