使用缓存需要考虑的问题

缓存穿透:使用在缓存中不存在的key进行大量的高并发查询。预防措施:①对服务设计限流和熔断降级②可以针对不存在的key在缓存中缓存起来,再次收到相同的请求,会直接查询到空值然后进行返回。
缓存并发:某一个缓存key失效时,在高并发下,多个请求同时访问数据库来查询最新数据,并且会写缓存。预防措施:①同步数据库最新数据的操作加上分布式锁②本地锁(不推荐,但是简单)③软过期,不使用缓存自带的过期设置,在缓存的value中设置过期时间,查询数据时,如果发现时间即将过期,则将失效时间延长,程序另起一个线程去数据库查询最新数据,然后更新缓存。其他线程这时看到延长了的过期时间,就会继续使用旧数据,等派遣的线程获取最新数据后再更新缓存。(当然也需要注意另起的那个线程更新缓存失败情况下的补偿)
缓存雪崩:大量key失效在某一段时间内失效,给后端服务器造成瞬时的负载升高的压力。预防措施:对不同的缓存设置不同的失效时间,预防大批量的缓存在较短时间段内同时过期。比如对同一类型的缓存,设置一个基准的失效时间,然后在这个基准线上上下浮动。

猜你喜欢

转载自www.cnblogs.com/TryTired/p/11135278.html