缓存穿透等问题

缓存穿透:查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。

引发原因:1、用户请求的id在缓存中不存在;2、恶意用户伪造不存在的id发起请求(黑客攻击)

解决方案:

1、如果是非法请求,我们在API入口对参数进行校验,过滤非法值

2、如果查询数据库为空,我们可以先给缓存设置一个空值,如果有请求进来的话,可以保证缓存一致性,同时给缓存设置一个过期时间,

3、使用布隆过滤器快速判断数据是否存在,即一个查询请求过来的时候,先通过布隆过滤器判断值是否存在,如果存在,才能继续往下查。

缓存击穿:热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到数据库。和缓存雪崩很像,区别就是击穿是针对一个热点key,而缓存雪崩是针对大量key。

引发原因:热点key失效的时候,大量请求访问,导致数据库压力过大。

解决方案:

1、加锁,限制同一时刻只能有一个请求访问。

2、设置“永不过期”,或者不设置过期时间。

3、自动续期

缓存雪崩:指缓存中数据大批量到过期时间,而查询数据量巨大,请求都直接打到数据库上了,引发数据库压力过大造成宕机。

引发原因:大批量数据同时过期。

解决方案:

1、过期时间加随机数,避免大批量数据同时过期。

2、使用redis高可用集群

3、限流降级 加锁,设置某些key只能允许一个线程查询和缓存写入,其他线程等待,缓解大并发流量对数据库的打击。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值