码迷,mamicode.com
首页 > 其他好文 > 详细

使用缓存需要考虑的问题

时间:2019-07-04 22:42:47      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:其他   一段   后端服务   数据库查询   线程   穿透   设置   本地   批量   

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

使用缓存需要考虑的问题

标签:其他   一段   后端服务   数据库查询   线程   穿透   设置   本地   批量   

原文地址:https://www.cnblogs.com/TryTired/p/11135278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!