没看这篇干货,别说你会使用“缓存”( 五 )


③缓存击穿
在数据请求的时候,某一个缓存刚好失效或者正在写入缓存,同时这个缓存数据可能会在这个时间点被超高并发请求,成为“热点”数据 。
这就是缓存击穿问题,这个和缓存雪崩的区别在于,这里是针对某一个缓存,前者是针对多个缓存 。
解决方案:导致问题的原因是在同一时间读/写缓存,所以只有保证同一时间只有一个线程写,写完成以后,其他的请求再使用缓存就可以了 。
比较常用的做法是使用 mutex(互斥锁) 。在缓存失效的时候,不是立即写入缓存,而是先设置一个 mutex(互斥锁) 。当缓存被写入完成以后,再放开这个锁让请求进行访问 。
总结
今天内容有点多,让我们一起来回顾一下 。缓存设计有五大策略,从用户请求开始依次是:

  • HTTP 缓存
  • CDN 缓存
  • 负载均衡缓存
  • 进程内缓存
  • 分布式缓存
前两种缓存静态数据,后三种缓存动态数据:
  • HTTP 缓存包括强制缓存和对比缓存 。
  • CDN 缓存和 HTTP 缓存是好搭档 。
  • 负载均衡器缓存相对稳定资源,需要服务协助工作 。
  • 进程内缓存,效率高,但容量有限制,有两个方案可以应对缓存同步的问题 。
  • 分布式缓存容量大,能力强,牢记三个性能算法并且防范三个缓存风险 。
作者:崔皓
简介:十六年开发和架构经验,曾担任过惠普武汉交付中心技术专家,需求分析师,项目经理,后在创业公司担任技术/产品经理 。善于学习,乐于分享 。目前专注于技术架构与研发管理 。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】




推荐阅读