缓存穿透、缓存击穿、缓存雪崩学习

缓存穿透

用户访问同一个缓存及数据库中都不存在的数据(比如id暴力攻击,用户一只访问id为负的数据),导致大量请求打到数据库上,造成服务器压力。

解决方案: 1、使用布隆过滤器(原理就是将访问id通过多次hash算法得到一个值放入map中,下次直接访问布隆过滤器判断是否垃圾数据,效率很高)。

      2、将访问不到的key值用null存储到缓存中,下次再查询该值直接返回。(不推荐,万一随机数id,造成缓存大量垃圾数据)。

      

 

缓存击穿

在同一时间,大量用户访问缓存中某一数据,但是缓存突然过期,导致大量用户请求打到数据库上,造成数据库访问压力。

解决方案: 1、设置热点数据永不过期。

      2、加互斥锁,第一个访问到发现缓存失效则加锁,并且将后面的请求睡眠一定时间,等第一个请求获取数据并放入缓存。

 

 

缓存雪崩

同一时间缓存大面积失效,导致大量请求打到数据库上,造成数据库访问压力

解决方案: 1、设置随机数过期时间

      2、设置热点数据永远不过期

 

posted @ 2021-04-25 21:07  香吗  阅读(51)  评论(0)    收藏  举报