使用缓存需要考虑的问题

Posted trytired

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用缓存需要考虑的问题相关的知识,希望对你有一定的参考价值。

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

以上是关于使用缓存需要考虑的问题的主要内容,如果未能解决你的问题,请参考以下文章

想用好 DNS 技术必看:浅析DNS缓存技术及应用考虑

浅析DNS缓存技术及应用考虑

我啥时候应该考虑使用内存数据库,需要注意啥问题?

面试官:你是如何使用JDK来实现自己的缓存(支持高并发)?

思考:缓存的使用?灵活运用?

缓存一致性策略以及雪崩穿透问题