redis 缓存击穿、缓存雪崩区别和解决方案
缓存击穿
缓存击穿是指当一个数据缓存中没有,持久层也没有,当一个用户来请求这个数据时,在缓存中没有找到,直接请求到持久层。当很多用户同时请求时,造成持久层压力巨大。
解决方案:
1、布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
2、返回 null 值:将缓存中没有数据库中也没有值,添加 key-null 到 redis中,设置过期时间半小时。
3、多级缓存:在客户端记录缓存。
缓存雪崩
缓存雪崩是指大量key在同一时刻失效。当用户请求这些数据时,都会到达持久层,给物理层带来巨大的压力。常常发生在秒杀,促销等活动中。
解决方案:
1、延迟缓存失效时间:将失效时间延长半小时。
2、随机失效时间:不统一失效时间,在失效时间后面加上随机时间。
3、缓存标记:记录缓存数据是否过期,如果过期通知另一个线程更新缓存。