缓存穿透
什么是缓存穿透
缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。
使用这条或这批不存在的数据疯狂发起查询请求的时候,对数据库造成的压力就非常大,甚至可能直接挂掉
缓存穿透解决方案
方法一般有两种:
第一种是缓存空对象
第二种是使用布隆过滤器,这是比较推荐的方法
缓存击穿
什么是缓存击穿
缓存击穿是指当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过缓存,直接查询数据库。这种情况会导致数据库压力瞬间骤增,造成大量请求阻塞,甚至直接挂掉。
缓存击穿解决方案
解决缓存击穿的方法有两种
第一种是设置key永不过期
第二种是使用分布式锁,保证同一时刻只能有一个查询加载热点数据到缓存中,其它的线程只需等待该线程运行完毕,即可重新从Redis中获取数据。
缓存雪崩
什么是缓存雪崩
缓存雪崩是指当缓存中有大量的key在同一时刻过期,或者访问不到Redis了,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。
缓存雪崩解决方案
针对大量key同时过期的情况,只需要将每个key的过期时间打散即可,使它们的失效点尽可能均匀分布
针对访问不到redis的情况,采用redis高可用方案部署