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.pswp.cn/news/910419.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910419.shtml
英文地址,请注明出处:http://en.pswp.cn/news/910419.shtml

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

相关文章

【ArcGIS】在线影像底图调用

【ArcGIS】在线影像底图调用 一、 历史影像的调用二、ArcGIS online底图调用三、结语 一、 历史影像的调用 ESRI官方推出了World Imagery Wayback是一个提供全球范围内历史影像的在线服务。 官网地址:https://livingatlas.arcgis.com/wayback/ 操作步骤&#xff1…

密度估计:从零星足迹重建整体画像

想象你是一位侦探,案发现场只留下几个零散的脚印。**如何通过这些碎片,推断嫌疑人的身高体重?甚至预测他下一步的藏身之处?** 这种从局部反推整体的能力,正是**密度估计(Density Estimation)** …

B004基于STM32F401单片机简易交通灯实训数码管显示设计仿真资料

视频演示地址:https://www.bilibili.com/video/BV1GvNDzFEd9/ 运行环境 仿真软件:proteus8.17(切记别的版本不能运行) 编程软件:MDK525 STM32 cubmx版本:6.11.1(切记别的版本不能运行) 原理图画图软件:AD10 功能说明: 以STM32F401CB单片机为核心简易交通灯功能如下。…

没掌握的知识点记录

1、微内核的主要优点在于结构清晰、内核代码量少,安全性和可靠性高、可移植性强、可伸缩性、可扩展性高;其缺点是难以进行良好的整体优化、进程间互相通信的开销大、内核功能代码不能被直接调用而带来服务的效率低。 2、题目: 分页内存管理…

linux 远程终端执行qt应用显示到接入的物理显示器上

在显示器打开终端执行: xhost local: 在远程终端执行: export DISPLAY:0然后在终端执行qt应用就可以。 xhost local: 功能:允许本地用户(local:)访问 X 服务器(X11 图形系统)。 原理&#xf…

【AI驱动网络】

一、AI 驱动网络 1.1 什么是网络 1.1.1、网络的定义 ​网络是由若干节点​(如计算机、服务器、移动设备等)和连接这些节点的链路​(有线或无线传输介质)构成的系统,用于实现地理位置分散的独立设备之间的信息交换、资源共享与协同工作。在计算机领域,网络是信息传输、…

Python期末速成

一.基础内容 赋值语句: a 1 b "mayday" 标识符规则: 1.字母,数字,下划线,汉字组成。但数字不能开头 2.不能是保留字 3.特殊符号不行,*¥^等 注释是在语句前面加# …

【时时三省】(C语言基础)指针变量例子

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 存放地址的变量是指针变量,它用来指向另一个对象(如变量、数组、函数等)。 那么,怎样定义和使用指针变量呢? 先分析一个例子。 例题 通过…

MATLAB代码演示,TDOA定位的优化算法,提升Z轴的定位精度|复现《基于最小二乘法的室内三维定位算法研究》

本文复现文章: 王桂杰,焦良葆,曹雪虹.基于最小二乘法的室内三维定位算法研究[J].计算机技术与发展,2020,30(04):69-73.按照文章的核心算法,复现了TDOA下的最小二乘在三维环境中的改进定位方法,方法可以明显提升Z轴的定位精度 文章目录 概述运行结果展示matlab代码完整代码概…

React useState 原理

Fiber架构 React16 之后 提升显示性能 电脑屏幕参数刷新率 表示1s刷新次数 页面渲染 和 JS代码执行 共享一个线程 互斥 保持上一帧图像表现:卡顿 reconcilier改为 stack 和 fiber Fiber数据结构 执行单元 浏览器优先执行用户响应相关或者界面渲染相关事件&#…

【Datawhale组队学习202506】零基础学爬虫 01 初始爬虫

系列文章目录 01 初始爬虫 02 数据解析与提取 文章目录 系列文章目录前言1 爬虫和Python2 爬虫的矛盾2.1 爬虫与反爬2.2 robots核心字段重要规则说明非标准扩展指令协议生效条件局限性验证工具 2.3 一个爬虫demo 3 Web请求与HTTP协议3.1 一个web请求的全过程3.2 判断页面源代码…

前端面试十之vuex

Vuex 是一个专为 Vue.js 应用程序设计的状态管理模式和库,它集中管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。以下是关于 Vuex 的详细介绍: 1. 核心概念 State(状态) 它是 Vuex 中存…

Django中为api自定义一些装饰器:如参数校验等

在Django中使用了rest_framework时,一般我们会定义ModelSerializer来校验request.data中参数是否存在和参数类型。 但当我们只是想简单校验一些api的url上是否存在某些参数时,该怎么办?当然我们也可以通过定义Serializer来实现,但…

uni-app项目实战笔记21--uniapp缓存的写入和读取

一、缓存的写入 uni.setStorageSync("storageClassList",classifyList.value) 二、缓存的读取,如果缓存不存在,则返回空数组 const storageClassList uni.getStorageSync("storageClassList") || []; 三、对读取到的数据进行转…

Zama密码分析资助计划

1. 引言 2025年5月,Zama团队正式启动了 Zama 密码分析资助计划(Cryptanalysis Grant Program),以支持那些致力于“破解”系统的研究人员: 无论是通过密码分析、侧信道攻击、故障注入,还是其他创新性方法。…

【数据结构与算法】数据结构初阶:详解顺序表和链表(一)

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》 🍉学习方向:C/C方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平 前言&am…

Arrays.asList() 的不可变陷阱:问题、原理与解决方案

🚨 Arrays.asList() 的不可变陷阱:问题、原理与解决方案 #Java集合 #开发陷阱 #源码解析 #编程技巧 一、问题现象:无法修改的集合 当开发者使用 Arrays.asList() 转换数组为集合时,尝试添加/删除元素会抛出异常: St…

uniapp对接融云IM即时通讯,语音消息无法播放

uniapp对接融云IM即时通讯,语音消息无法播放 问题背景解决方案1.本地音频播放2.远程音频播放 问题背景 最近使用uniapp对接融云的即时通讯sdk,发送语音消息后,本地音频(local)和远程音频(remote&#xff0…

【C++开发】CMake构建工具

目录 1,CMake介绍 2,配置文件CMakeLists.txt 1,CMake介绍 CMake 是一个开源的、跨平台的自动化构建系统生成工具,广泛用于 C 和 C 项目的构建管理。它使用一个名为 CMakeLists.txt 的配置文件来定义如何构建项目,并能…

大模型MetaGPT面试题汇总及参考答案

目录 MetaGPT 的核心目标与设计理念是什么? 它如何实现多角色协同(如 Planner、Coder、Reviewer、Tester)? 不同 agent 之间的通信机制是怎样的? MetaGPT 是如何进行任务拆分与任务分配的? 它如何实现可执行的反馈循环(self-correcting)? 在实际项目中如何监控各…