- 缓存常见的问题
- 缓存穿透
- 缓存雪崩
- 缓存击穿(热点key)
缓存穿透
现象
缓存穿透问题是指,请求了一个一定不会请求到的数据,这个时候,一定会穿透缓存到达DB,如果量十分大的话,会对DB性能造成影响(攻击)
解决
- 使用布隆过滤器,添加入所有的可能查询,对请求进行过滤,如果不存在的直接过滤
- 空值缓存,对于拿到为空的请求,加入缓存设置空值,并给与很短的失效时间,因为可能这个值不一定是攻击,故不必存储太久
缓存雪崩
现象
缓存在同一时间大量失效,DB可能在突增的压力下崩溃
解决
- 使用互斥锁来保证只有单个线程可以对DB进行请求,该方法会降低QPS
- 种缓存时将超时时间错开,可以随机加一个秒数
缓存击穿(热点key)
现象
对于一些热点key,在他失效的那一段时间内,会有大量的请求走DB,对DB造成很大的压力
解决方案
- 二级缓存,不同等级的缓存设置不同的失效时间
- 互斥锁,限制只有一个线程对DB进行请求
- 永不过期,后台异步线程去定时的刷新缓存