博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缓存穿透/击穿/雪崩/降级
阅读量:4975 次
发布时间:2019-06-12

本文共 699 字,大约阅读时间需要 2 分钟。

什么是缓存穿透?

恶意用户模拟请求很多缓存和数据库中不存在的数据,导致这些请求短时间内直接落在数据库上,导致数据库异常,比如抢购、秒杀活动的接口被用户恶意刷,或者查询id为-1的数据。

缓存穿透解决方案:

1.增加校验,不符合基本查询数据规则的数据直接拦截,eg:id<=0的数据不让查询

2.给该key设置默认值,可以设置为null,有效时间短一点,最多不超过5分钟

什么是缓存击穿:

指缓存中没有,数据库中有的一条数据(一般是缓存时间到期),这时查询这一条数据并发量比较大的话,会直接到数据库中取数据,造成数据库压力过大。

缓存击穿解决方案:

1.设置热数据有效时间加长,或者设置为永不过期

2.加互斥锁,可以利用setnx给key加上锁,如果缓存中没数据,那么先尝试 获取锁(reetranLock.tryLock()),获取到了就从数据库中查询(然后 释放锁reetranLock.unLock()),获取不到就等待100ms,再次查询

什么是缓存雪崩?

指缓存中大量数据到了过期时间,此时查询量过大会落到数据库上,导致数据库压力过大。

缓存雪崩解决方案:

1.缓存数据随机设置过期时间,防止同一时间大量数据过期

2.如果缓存数据库是分布式部署,将热点数据均匀分布在不同缓存数据库中

3.设置热点数据永不过期,或者有效期长点

缓存降级:

就是在高并发高负载情况下,选择动态的关闭一下不重要的服务,拒绝访问,限流等,来为重要的服务节省资源,比如电商平台秒杀当天可以关闭推荐等功能。

转载于:https://www.cnblogs.com/java-spring/p/10794347.html

你可能感兴趣的文章
Unix环境链接静态库
查看>>
beego离线安装及运行
查看>>
[Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing...
查看>>
[Xcode 实际操作]一、博主领进门-(9)Xcode左侧的项目导航区界面介绍
查看>>
[Swift通天遁地]九、拔剑吧-(12)创建Preview-Transition图像预览界面
查看>>
已达到系统管理员配置的最大报表处理作业数限制
查看>>
CXF-JAX-RS开发(一)入门案例
查看>>
[LeetCode] 101. Symmetric Tree_ Easy tag: BFS
查看>>
[Node.js] Test Node RESTful API with Mocha and Chai
查看>>
[Javascript] Prototype, hasOwnProperty(), valueOf() and toString() methods.
查看>>
(转载)计算机视觉(ComputerVision, CV)相关领域的网站链接
查看>>
6个监控linux资源的快速工具
查看>>
Android开发(二十)——Fragment中的touch事件
查看>>
linux 运行tensorflow文件缺少_bz2问题及解决
查看>>
WinForm子线程调用主线程
查看>>
《软件工程课程总结》
查看>>
js DOM操作
查看>>
转:【专题九】实现类似QQ的即时通信程序
查看>>
Linux系统 Nginx常见技术指南
查看>>
前端学习之-Javascript
查看>>