③缓存击穿
在数据请求的时候,某一个缓存刚好失效或者正在写入缓存,同时这个缓存数据可能会在这个时间点被超高并发请求,成为“热点”数据 。
这就是缓存击穿问题,这个和缓存雪崩的区别在于,这里是针对某一个缓存,前者是针对多个缓存 。
解决方案:导致问题的原因是在同一时间读/写缓存,所以只有保证同一时间只有一个线程写,写完成以后,其他的请求再使用缓存就可以了 。
比较常用的做法是使用 mutex(互斥锁) 。在缓存失效的时候,不是立即写入缓存,而是先设置一个 mutex(互斥锁) 。当缓存被写入完成以后,再放开这个锁让请求进行访问 。
总结
今天内容有点多,让我们一起来回顾一下 。缓存设计有五大策略,从用户请求开始依次是:
- HTTP 缓存
- CDN 缓存
- 负载均衡缓存
- 进程内缓存
- 分布式缓存
- HTTP 缓存包括强制缓存和对比缓存 。
- CDN 缓存和 HTTP 缓存是好搭档 。
- 负载均衡器缓存相对稳定资源,需要服务协助工作 。
- 进程内缓存,效率高,但容量有限制,有两个方案可以应对缓存同步的问题 。
- 分布式缓存容量大,能力强,牢记三个性能算法并且防范三个缓存风险 。
简介:十六年开发和架构经验,曾担任过惠普武汉交付中心技术专家,需求分析师,项目经理,后在创业公司担任技术/产品经理 。善于学习,乐于分享 。目前专注于技术架构与研发管理 。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】
推荐阅读
- UI进阶知识-按钮设计,看这篇文章就够了
- 关于消息队列的优缺点,看这篇就行
- 看完这篇你还不知道这些队列,我这些图白作了
- 红薯粉怎么辨别真假?干货店老板:教你5招,看一眼就能区别
- 汽车是真皮座椅,还需要座垫套吗?这篇文章来给你答案
- 茶是极简
- 看了这篇文章 我才知道PS混合模式这么简单
- 这篇文章把 Linux 系统讲的如此详细,看完你一定会有质的飞跃
- 梦见冒烟但没看见火焰浇灭了 梦见冒烟但没看见火焰一直逃避
- PHP的缓冲区你了解过吗
