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

MySQL和Redis更新一致性问题

1. 先更新数据库,再更新缓存

适用场景:适用于对数据一致性要求不是特别高,且缓存更新失败对
系统影响较小的场景。例如,某些非关键数据的缓存更新。
风险:如果缓存更新失败,会导致数据库和缓存数据不一致。
// 更新数据库
updateMySQL(data);
// 更新缓存
updateRedis(data);

2. 先删除缓存,再更新数据库
这种方法可以减少数据不一致的时间窗口,但仍然存在问题。如果删除缓存后,更新数据库失败,会导致缓存中没有数据,而数据库中的数据是旧的。

适用场景:适用于对数据一致性有一定要求,且数据库更新失败对系
统影响较小的场景。例如,某些读多写少的缓存数据。
风险:如果数据库更新失败,会导致缓存中没有数据,而数据库中的
数据是旧的。
// 删除缓存
deleteRedis(key);
// 更新数据库
updateMySQL(data);

3. 先更新数据库,再删除缓存
这种方法可以减少数据不一致的时间窗口,但仍然存在问题。如果更新数据库后,删除缓存失败,会导致缓存中的数据是旧的。

适用场景:适用于对数据一致性有一定要求,且缓存删除失败对系统
影响较小的场景。例如,某些读多写少的缓存数据。
风险:如果缓存删除失败,会导致缓存中的数据是旧的。
// 更新数据库
updateMySQL(data);
// 删除缓存
deleteRedis(key);

4. 使用事务或分布式锁
通过使用事务或分布式锁,可以确保数据库和缓存的更新操作是原子的。
使用事务
在某些情况下,可以使用数据库事务来确保数据库和缓存的更新操作是原子的。

适用场景:适用于对数据一致性要求非常高,且需要确保数据库和缓
存更新操作的原子性的场景。例如,金融交易、订单处理等关键业务。
风险:使用事务或分布式锁会增加系统的复杂性和开销,可能会影响
系统的性能。
try {// 开始事务startTransaction();// 更新数据库updateMySQL(data);// 删除缓存deleteRedis(key);// 提交事务commitTransaction();
} catch (Exception e) {// 回滚事务rollbackTransaction();
}

使用分布式锁
通过使用分布式锁,可以确保在同一时间只有一个线程可以更新数据库和缓存。

// 获取分布式锁
if (acquireLock(lockKey)) {try {// 更新数据库updateMySQL(data);// 删除缓存deleteRedis(key);} finally {// 释放分布式锁releaseLock(lockKey);}
}

5. 使用消息队列
通过使用消息队列,可以将更新操作解耦,并确保更新操作的顺序性。

适用场景:适用于对数据一致性有一定要求,且需要解耦更新操作的
场景。例如,异步处理、批量更新等。
风险:消息队列可能会引入额外的延迟,且消息处理失败会导致数据
不一致。
// 发送更新消息到消息队列
sendMessageToQueue(updateMessage);// 消费者处理消息
consumeMessageFromQueue(updateMessage) {// 更新数据库updateMySQL(data);// 删除缓存deleteRedis(key);
}

6. 使用缓存过期时间
通过设置缓存的过期时间,可以减少数据不一致的时间窗口。

适用场景:适用于对数据一致性要求不是特别高,且可以容忍一定时
间内数据不一致的场景。例如,某些非关键数据的缓存。
风险:缓存过期时间内,数据可能不一致。
// 更新数据库
updateMySQL(data);
// 删除缓存
deleteRedis(key);
// 设置缓存过期时间
setRedisExpiration(key, expirationTime);

相关文章:

MySQL和Redis更新一致性问题

1. 先更新数据库,再更新缓存 适用场景:适用于对数据一致性要求不是特别高,且缓存更新失败对 系统影响较小的场景。例如,某些非关键数据的缓存更新。 风险:如果缓存更新失败,会导致数据库和缓存数据不一致。…...

(19)夹钳(用于送货)

文章目录 前言 1 常见的抓手参数 2 参数说明 前言 Copter 支持许多不同的抓取器,这对送货应用和落瓶很有用。 按照下面的链接(或侧边栏),根据你的设置了解配置信息。 Electro Permanent Magnet v3 (EPMv3)Electro Permanent M…...

安装lap和cython_bbox失败了很多次!!!终于被我发现了!

先说 lap 试了很多种方式,pip install lap / conda install -c conda-forge lap … 全失败了后面发现 lap 不支持 python > 3.9 的版本使用 pip install lapx 成功! cython_bbox 更难了 一直提示缺少MicroSoft C 14.0 … 大家有需要自行下载&#x…...

异业联盟整合各大行业门店,共享资源

异业联盟系统是一种将不同行业的企业或商家整合在一起,通过资源共享、优势互补、合作推广等方式,实现共同发展和互利共赢的商业合作模式的数字化管理和运营系统。 其具有以下显著优势: 1.拓展客户群体:不同行业的企业联合起来&am…...

前端如何去看蓝湖

首先加入团队,在内容中我们可以看到点击图片,右边出现的图 包含了像素甚至有代码,我们可以参考这个代码。 那么在使用之前我们需要调整好像素,例如我们的像素宽为375,不用去管高,然后这个宽度我们可以去自…...

HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>3D effect&…...

常用网络概念

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…...

图鸟UI框架在uni-app多端应用开发中的实践与应用

摘要&#xff1a; 随着移动互联网的蓬勃发展&#xff0c;跨平台应用开发已成为行业趋势。本文将探讨图鸟UI框架如何在uni-app开发环境下助力开发者高效构建多端应用&#xff0c;并通过具体案例展示其在实际项目中的应用效果。 一、引言 在移动应用开发领域&#xff0c;跨平台…...

特征值究竟体现了矩阵的什么特征?

特征值究竟体现了矩阵的什么特征&#xff1f; 简单来说就是x经过矩阵A映射后和自己平行 希尔伯特第一次提出eigenvalue,这里的eigen就是自己的。所以eigenvalue也称作本征值 特征值和特征向量刻画了矩阵变换空间的特征 对平面上的任意向量可以如法炮制&#xff0c;把他在特征…...

C语言-顺序表

&#x1f3af;引言 欢迎来到HanLop博客的C语言数据结构初阶系列。在这个系列中&#xff0c;我们将深入探讨各种基本的数据结构和算法&#xff0c;帮助您打下坚实的编程基础。本次我将为你讲解。顺序表&#xff08;也称为数组&#xff09;是一种线性表&#xff0c;因其简单易用…...

OpenCV漫水填充函数floodFill函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 ffloodFill函数是OpenCV库中用于图像处理的一个功能&#xff0c;它用于填充与种子点颜色相近的连通区域。这个函数在很多场景下都非常有用&#x…...

redis内存分析

阿里云redis集群对key进行hash后保存在对应的后端节点&#xff0c;使每个节点的key数量大致相同&#xff0c;但是如果存在大key&#xff0c;就会导致单个节点内存用满&#xff0c;可以使用redis-rdb-tools 或rdr来对内存进行分析。 redis-rdb-tools redis-rdb-tools通过对dum…...

redis批量删除keys,用lua脚本。

文章目录 现象解决方法 现象 系统报错&#xff1a; misconf redis is configured to save ....后查看机器内存。 是内存满了&#xff0c;需要删除其中的key 解决方法 (1) 编写一个脚本&#xff0c;放在redis-cli.exe同一个目录 (2) 脚本内容如下&#xff1a; -- 使用Lua脚…...

Python-找客户软件

软件功能 请求代码&#xff1a; 填充表格&#xff1a; 可以search全国各个区县的所有企业信息&#xff0c;过滤手机号、查看是否续存/在业状态。方便找客户。 支持定-制-其他引-留-阮*件&#xff08;XHSS&#xff0c;DYY&#xff0c;KS&#xff0c;Bi-li*Bi-li&#xff09; V*…...

STM32 - PWR 笔记

PWR&#xff08;Power Control&#xff09;电源控制 PWR 负责管理 STM32 内部的电源供电部分&#xff0c;可以实现 可编程电压监测器 和 低功耗模式 的功能 可编程电压监测器&#xff08;PVD&#xff09;可以监控VDD电源电压&#xff0c;当VDD下降到PVD阀值以下或上升到PVD…...

标准盒模型和怪异盒子模型的区别

在 CSS 中&#xff0c;标准盒模型和怪异盒模型是两种不同的盒子模型计算方式&#xff0c;主要区别如下&#xff1a; 一、标准盒模型&#xff08;content-box&#xff09; 1. 定义与组成 - 标准盒模型是 CSS 中默认的盒模型。 - 它由内容区域&#xff08;content&#xff09;、…...

推荐算法——MRR

定义&#xff1a; MRR计算的是第一个正确答案的排名的倒数&#xff0c;并对所有查询取平均值。它衡量了模型在排序结果中快速找到正确答案的能力。 其中&#xff1a; Q 是查询的总数。ranki​ 是第 i 个查询中第一个正确答案的排名&#xff08;位置&#xff09;。如果第一个正…...

idea中打开静态网页端口是63342而不是8080

问题&#xff1a; 安装了tomcat 并且也配置了环境&#xff0c;但是在tomcat下运行&#xff0c;总是在63342下面显示。这也就意味着&#xff0c;并没有运行到tomcat环境下。 找了好几个教程&#xff08;中间还去学习了maven&#xff0c;因为跟的教程里面&#xff0c;没有maven,但…...

Vue3框架搭建3:配置说明-prettier配置

1、配置说明&#xff1a; .prettierrc.json{"$schema": "https://json.schemastore.org/prettierrc","semi": false,"tabWidth": 2,"singleQuote": true,"printWidth": 100,"trailingComma": "no…...

SQL MySQL定时器/事件调度器(Event Scheduler)

事件调度器&#xff08;Event Scheduler&#xff09;在MySQL数据库系统中是一个强大的功能组件&#xff0c;它允许用户定义一系列称为“事件”的数据库对象&#xff0c;这些事件在指定的时间或时间间隔自动执行预定义的SQL语句或操作。事件调度器通过维护一个时间计划表来管理这…...

如何用SwiftUI实现macOS自动化点击:技术原理与实战指南

如何用SwiftUI实现macOS自动化点击&#xff1a;技术原理与实战指南 【免费下载链接】macos-auto-clicker A simple auto clicker for macOS Big Sur, Monterey, Ventura, Sonoma and Sequoia. 项目地址: https://gitcode.com/gh_mirrors/ma/macos-auto-clicker macOS自动…...

告别系统资源占用困扰:sguard_limit智能优化工具实现性能提升全指南

告别系统资源占用困扰&#xff1a;sguard_limit智能优化工具实现性能提升全指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源&#xff0c;支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 在数字生活中&#xff0c…...

4步构建企业级语音识别服务:开发者效率提升实战指南

4步构建企业级语音识别服务&#xff1a;开发者效率提升实战指南 【免费下载链接】whisper-asr-webservice OpenAI Whisper ASR Webservice API 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-asr-webservice 在数字化转型加速的今天&#xff0c;如何将语音信息高…...

在快马平台用Qt快速构建音乐播放器原型:十分钟搞定跨平台UI

最近在做一个音乐播放器的原型设计&#xff0c;尝试用Qt框架在InsCode(快马)平台上快速验证想法。整个过程比想象中顺利很多&#xff0c;特别适合需要快速验证UI方案的场景。这里记录下我的实践过程&#xff0c;分享给同样需要快速原型开发的朋友们。 为什么选择Qt做音乐播放器…...

突破物理手柄限制!用vJoy打造3类自定义虚拟控制器

突破物理手柄限制&#xff01;用vJoy打造3类自定义虚拟控制器 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 当你在赛车游戏中因键盘无法实现精细转向而屡屡撞墙&#xff0c;当直播时需要同时操控游戏与控制台却手忙脚乱&a…...

图解numpy轴运算:用动画演示argmin/argmax在不同维度下的工作原理(附可运行代码)

用空间思维理解NumPy轴运算&#xff1a;argmin/argmax的维度穿越指南 当你第一次在NumPy中遇到axis参数时&#xff0c;是否感觉像在解一道空间几何题&#xff1f;本文将通过视觉化的思维模型&#xff0c;带你穿透维度的迷雾&#xff0c;掌握argmin和argmax在不同维度数组中的行…...

番茄小说下载器:打造个人离线图书馆的终极指南 [特殊字符]

番茄小说下载器&#xff1a;打造个人离线图书馆的终极指南 &#x1f345; 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 想要随时随地畅读番茄小说&#xff0c;不受网络限制&…...

AdGuard浏览器扩展终极指南:3步打造无广告浏览体验

AdGuard浏览器扩展终极指南&#xff1a;3步打造无广告浏览体验 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension 你是否厌倦了网页上无处不在的广告弹窗&#xff1f;是否担心…...

5种多屏显示优化方案:专业用户的DPI精准控制指南

5种多屏显示优化方案&#xff1a;专业用户的DPI精准控制指南 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 场景痛点&#xff1a;跨行业的显示一致性难题 内容创作者的显示困境 视频剪辑师张明在4K主显示器上精心调整的画面比例&…...

3个理由告诉你,为什么GraphvizOnline是技术文档的最佳图表工具

3个理由告诉你&#xff0c;为什么GraphvizOnline是技术文档的最佳图表工具 【免费下载链接】GraphvizOnline Lets Graphviz it online 项目地址: https://gitcode.com/gh_mirrors/gr/GraphvizOnline 还在为制作复杂的技术架构图而头疼吗&#xff1f;GraphvizOnline这款免…...