论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
SQL-Server
›
你知道缓存的这个问题到底把多少步伐员坑惨了吗? ...
你知道缓存的这个问题到底把多少步伐员坑惨了吗?
张国伟
金牌会员
|
2024-8-1 01:41:25
|
显示全部楼层
|
阅读模式
楼主
主题
947
|
帖子
947
|
积分
2841
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
在现代体系中,缓存可以极大地提升性能,减少数据库的压力。
然而,一旦缓存和数据库的数据不一致,就会引发各种诡异的问题。
我们来看看几种常见的解决缓存与数据库不一致的方案,每种方案都有各自的优缺点
先更新缓存,再更新数据库
这种方案看似简单,现实上很少被推荐。
缘故起因在于假如在更新数据库之前发生了错误,缓存中的数据将和数据库中的数据不一致,最终导致更大的问题。
先更新数据库,再更新缓存
这种方法解决了更新缓存失败的问题,但大概引发别的一个问题:
在高并发场景下,数据库已经更新,但缓存还没有更新时,其他哀求大概会读到旧的缓存数据。
先删除缓存,后更新数据库
这种方案在高并发下容易产生问题:
在缓存删除和数据库更新之间的时间窗口内,其他哀求大概会读取到旧的数据,导致短时间内的数据不一致
先更新数据库,后删除缓存
这是较为推荐的一种方法,但在高并发场景下也有一定的局限性:
假如数据库更新成功但缓存删除失败,大概导致短时间内的数据不一致。
强一致性与最终一致性
在讨论一致性的时候,我们经常会提到强一致性和最终一致性。
根据业务需求衡量这两者,是缓存策略筹划中的告急一步。
后面我会给出一个弱一致性的推荐方案,供大家参考。
SpringCache是一个非常实用的缓存管理框架,能资助我们简化缓存操纵。
以下是一个简单的SpringCache配置示例:
缓存预热策略
缓存预热的告急性不问可知,上线后瞬时大流量大概导致缓存击穿。
以下是几种常见的缓存预热方案:
启动时加载:体系启动时加载常用数据到缓存。
定时加载:定时任务定期加载数据。
手动加载:手动实行预热脚本。
推荐方案
综合考虑各种方案的优缺点,我给大家一种工作中真正常用的方案,也是我待过的互联网公司中实践过的方案。
这是一种非常简单且本钱很低的操纵,但能解断交大多数的缓存与数据库不一致问题。
原理很好理解,就是更新数据库之后设置公道的休眠时间,然后再次删除掉其他线程哀求进来导致的旧缓存,最终达到缓存和数据库都是最新数据的目的。
此中休眠时间要根据自身业务的平均耗时来决定,而耽误双删着实就够了,耽误三删只是为了开阔大家的思绪,因为真有些公司删除三次来包管一些极端环境的不一致,但我觉得没必要,太极端就不是弱一致性了。
假如是比力复杂的项目,乃至能再进一步的优化,也就是借用定时任务和MQ来替代休眠线程,实现异步删除缓存,达到弱一致性的结果。
最后说一句(求关注!别白嫖!)
假如这篇文章对您有所资助,或者有所开导的话,求一键三连:点赞、转发、在看。
关注公众号:
woniuxgg
,在公众号中复兴:笔记 就可以获得蜗牛为你经心准备的java实战语雀笔记,复兴口试、开发手册、有超赞的粉丝福利!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
张国伟
金牌会员
这个人很懒什么都没写!
楼主热帖
XAF新手入门 - 类型子系统(Types Info ...
JAVA 装箱拆箱--到底指什么呢? ...
MyBatis 查询数据库
[NOI2010] 航空管制
ThinkPHP5 远程命令执行漏洞
HarmonyOS(鸿蒙)开发一文入门 ...
RabbitMQ入门 -- 阿里云服务器安装Rabb ...
浅入浅出 1.7和1.8的 HashMap
基于 Dubbo Admin 实现同机房/区域优先 ...
来自学长的建议
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
容器及微服务
MES
网络安全
DevOps与敏捷开发
云原生
IOS
物联网
虚拟化与私有云
快速回复
返回顶部
返回列表