缓存穿透、缓存击穿、缓存雪崩学习
缓存穿透
用户访问同一个缓存及数据库中都不存在的数据(比如id暴力攻击,用户一只访问id为负的数据),导致大量请求打到数据库上,造成服务器压力。
解决方案: 1、使用布隆过滤器(原理就是将访问id通过多次hash算法得到一个值放入map中,下次直接访问布隆过滤器判断是否垃圾数据,效率很高)。
2、将访问不到的key值用null存储到缓存中,下次再查询该值直接返回。(不推荐,万一随机数id,造成缓存大量垃圾数据)。
缓存击穿
在同一时间,大量用户访问缓存中某一数据,但是缓存突然过期,导致大量用户请求打到数据库上,造成数据库访问压力。
解决方案: 1、设置热点数据永不过期。
2、加互斥锁,第一个访问到发现缓存失效则加锁,并且将后面的请求睡眠一定时间,等第一个请求获取数据并放入缓存。
缓存雪崩
同一时间缓存大面积失效,导致大量请求打到数据库上,造成数据库访问压力
解决方案: 1、设置随机数过期时间
2、设置热点数据永远不过期
浙公网安备 33010602011771号