缓存穿透、缓存击穿、缓存雪崩的定义及处理措施

缓存策略与挑战

1.缓存的流程及作用:

每一个企业级应用都应该在数据不要求必须及时的场景使用缓存,当用户访问某个业务场景时,先从缓存中读取,如果没有缓存或者缓存过期再去数据库读取,然后把数据写入缓存在返回客户端;这样减少了大量的数据库读取次数与压力,提高了系统性能。
在这里插入图片描述


2.缓存穿透:

缓存穿透一般都是人为的恶意访问行为,数据库唯一标识几乎都是自增长ID,攻击者就利用查询不到数据也不缓存或者缓存中根本没有的进行缓存穿透攻击,造成服务器资源浪费,甚至直接拒绝服务。
解决方案:
针对ID为负的访问请求,在程序中直接判断返回为空。
针对ID为正数的数据库没有记录的重复ID请求,在第一次读取数据库后保存value为任意字符的缓存,缓存时间按需设定,避免有数据记录后还是返回缓存内容。
针对ID为正数的数据库没有记录的不重复ID请求,可以配合服务器黑名单屏蔽攻击者IP,或者在系统中设置规则进行拦截。


3.缓存击穿:

在某个业务缓存过期而此时有大量并发访问,会造成数据库瞬间访问压力过大,造成反应过慢,从而形成缓存击穿。
解决方案:
在业务场景中增加互斥锁,首次访问业务的在没有缓存的时候拿到锁读取数据库,然后缓存数据,在释放锁,其他没有拿到锁的也没有缓存的sleep极短的时候然后在调用方法,此时应为在等待的时间中已经重新设这了缓存,所以后续的无需读取数据库。


4.缓存雪崩:

如果系统缓存在同一时间大量过期,导致所有访问的业务场景都去读取数据库,访问量大的系统很容易出现缓存雪崩,如果出现缓存雪崩显现,可能会引起宕机显现,造成无法挽回的损失:
解决方案:
缓存时间随机,避免在同一时间大量缓存失效。
部分数据永不过期,任务系统在晚上定时更新缓存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里藍天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值