1 穿透: 两边都不存在(皇帝的新装) (黑名单) (布隆过滤器)
2 击穿:一个热点的key失效了,这时大量的并发请求直接到达数据库. (提前预热)
3 雪崩:大量key同时失效 (避免大量的key同一时间失效,错峰)
缓存击穿
突发热点访问时,热点数据在Redis缓存中不存在或已过期。大量的对热点数据的访问,都将直接访问数据库,造成数据库访问压力短时激,从而增造成故障。
缓存穿透
数据在Redis缓存和数据库中都不存在。大量访问这种数据时,数据库频繁查找数据,造成压力过大,从而产生故障。应用场景: 壹:非正常数据访问;贰:黑客攻击。
缓存雪崩
大量key集中过期,数据库短时访问量激增。类似击穿的发生场景。
二、解决方案
1.解决缓存击穿
提前预设热门缓存数据
实时调整过期时间、自动续期
使用锁
缓存数据不存在时,把数据库数据放入缓存
2.解决缓存穿透
对不存在的数据进行数据空值缓存
设置白名单;(•可访问的数据id作为偏移值存入bitmaps;•访问时先检查bitmaps)
使用布隆过滤器
对黑客攻击进行实时监控
3.解决缓存雪崩
多级缓存架构(Nginx-本地缓存(ehcache/guava) -Redis)
锁或队列对并发访问进行序列化
Key设置过期标志,对即将过期数据进行提前更新,自动续期(类似击穿的解决方案)
数据的过期时间使用随机值,分散过期时间