关于redis中的缓存雪崩、穿透、击穿概念及解决办法

一个简单的redis的使用场景:

使用redis作为缓存的时候,大部分做法是 先在redis里查询是否有该KEY, 比如查询用户信息时,先在redis里根据用户ID查询,如果没有则到数据库里查询, 如果在数据库里查询到了再放入redis,并设置过期时间,然后返回用户数据。

该场景使用会导致以下3个问题:

1、缓存穿透:指的是redis中不存在该key, 而去查询数据库, 查到后再保存到redis, 查不到则直接返回。

这种情况看上去没毛病,正常业务操作也不会有啥问题。但是一些恶意攻击者可以使用大量不存在的key来攻击你的服务,如数据库 id 是从 1 开始的,结果攻击者发过来的请求 id 全部都是负数。这样的话,当大量不存在的key来请求你的服务时,请求每次都“视缓存于无物”,数据库接受大量的查询,达到一定的限度,这种恶意攻击场景的缓存穿透就会直接把数据库给压垮,造成其他服务不可用。

解决方式 :a、如果数据库根据该KEY未查到数据,不立即返回,先写一个空值到缓存里去,比如 set -999 UNKNOWN,并且过期时间设置小一点。这样的话,下次有相同的一个KEY来恶意访问的时候,在缓存失效之前,都可以直接从缓存中取数据,使得恶意攻击失效。 b、恶意攻击者可能使用不同的不存在的KEY来攻击,这个时候可以用过滤器来过滤掉一部分无效KEY。

2、缓存雪崩:redis中大量的KEY同时过期,或缓存机器意外发生了全盘宕机。缓存挂了&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值