论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
安全
›
网络安全
›
Redis缓存异常及解决方案
Redis缓存异常及解决方案
羊蹓狼
论坛元老
|
2024-8-16 17:57:31
|
显示全部楼层
|
阅读模式
楼主
主题
1019
|
帖子
1019
|
积分
3057
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
本文分享自天翼云开发者社区《
Redis缓存异常及解决方案
》,作者:l****n
本文向读者解释了Redis使用过程中,数据不一致、缓存雪崩、缓存击穿和缓存穿透等问题的定义,并给出对应的解决方案。
1、数据不一致
一致指的是
:
缓存中有数据,那么,缓存的数据值需要和数据库中的值相同;
缓存中自己没有数据,那么,数据库中的值必须是最新值。
不一致如何发生
:
对于读写缓存来说,写缓存时同步写数据库,需要使用事务保证缓存和数据库的更新具有原子性。弱一致性情况下,可以使用异步写回。
对于只读缓存,删改数据需要既更新数据库,又删除缓存。如果不使用事务,就会出现数据不一致。
比如先更新数据库,再删除缓存。更新乐成,删除缓存失败,则缓存中为旧值。如果先删除缓存再更新数据库,则缓存删除乐成,数据库更新失败,再访问数据库,数据库还是旧值。
解决方案
需要重试机制,当两个操作任意一个失败时,重新执行。
特别的,当数据库更新乐成,缓存删除也乐成时,其实也有可能不一致。比如删除了缓存,还未更新数据库。线程B此时读取数据库中旧值并写到缓存。
解决方法:延迟双删。sleep是为了等B线程执行完写缓存操作。sleep时间根据读数据和写缓存时间来估算。
redis.delKey(X)
db.update(X)
Thread.sleep(N)
redis.delKey(X)
比如更新了数据库,还未删除缓存时。B线程就开始读数据,从缓存读到旧值。不过这种情况下缓存会立即被删除,所以影响较小。
2、缓存雪崩
大量请求无法在redis得到处理,从而打到数据库。主要原因:
缓存中大量数据同时过期,应用访问时无法命中缓存,从而都请求到数据库;
redis宕机。
解决方案
:
过期时间增加随机数;
发生雪崩时进行服务降级。非核心数据直接返回默认值或错误;
限流熔断,当数据库负载突升时,停息业务应用对缓存的访问。
3、缓存击穿
热点数据过期失效,大量请求突然打到数据库。
解决方法
热点数据不设置过期时间。
4、缓存穿透
数据不在缓存中,也不在数据库中。可能原因:
业务层误操作,删除了数据库数据。
恶意攻击。
解决方案
:
缓存默认值;
使用布隆过滤器快速判定数据是否存在;
前端进行请求查抄。
在实际的业务中,以上异常场景可能会同时出现,排查时要根据自己的情况进行针对性分析。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
羊蹓狼
论坛元老
这个人很懒什么都没写!
楼主热帖
让你成为网络世界中有破坏力的人-HTTP ...
一文带你走进【内存泄漏】
dolphinscheduler单机化改造
day01-Tomcat框架分析
3. 视图-触发器-存储过程-索引 ...
使用jsch进行sftp传输时遇到的问题com. ...
基于 Sealos 的镜像构建能力,快速部署 ...
深入理解并发编程同步工具类 ...
邮件管理数据库设计--MySQL
一文搞懂static
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
云原生
虚拟化与私有云
分布式数据库
移动端开发
容器及微服务
Mysql
快速回复
返回顶部
返回列表