缓存的问题

缓存穿透

参考
缓存穿透是值缓存和数据库中都没有数据,而用户不断发起请求,如发起id为特别大或者不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

解决办法

  • 可以为这些key在缓存中设置对应的值为null,后面查询这个key的时候就不用查询数据库了
  • boolem Filter使用不领过滤器,我们把有数据的key都放在布隆过滤器中,每次查询的时候都先去布隆过滤器中判断,如果没有直接返回null

缓存击穿—大量请求一个key

在高并发的情况下,大量的请求同时查询同一个key时,此时这个key正好失效了,就会导致同一时间,这些请求都会去查询数据库,这样的现象我们称为缓存击穿

解决办法
采用分布式锁,只有拿到锁的第一个线程去请求数据库,然后插入缓存,当然每次拿到锁的时候都要去查询一下缓存有没有

缓存雪崩

缓存在同一时间大面积的失效,所以后面的请求都会落在数据库上,造成数据库接受大量的请求而崩掉。

解决办法

  • 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生
  • 设置热点数据永不失效
  • 如果缓存数据库是分布式部署,将热点数据均匀分布子啊不同的缓存数据库中
  • ehcache本地缓存 + Hystrix限流&降级
    ehcache 本地缓存的目的也是考虑在 Redis Cluster 完全不可用的时候,ehcache 本地缓存还能够支撑一阵
    使用 Hystrix进行限流 & 降级 ,比如一秒来了5000个请求,我们可以设置假设只能有一秒 2000个请求能通过这个组件,那么其他剩余的 3000 请求就会走限流逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值