缓存策略汇总
1.浏览器缓存
浏览器自带缓存304:图片的默认缓存时间为7天
客户端(浏览器)发送请求到服务器端 第一次请求的时候会缓存所有的静态资源到浏览器;
客户端发送第二次请求的时候 如果本地浏览器有缓存,就使用本地浏览器的;
Key:访问的url
value:具体的值信息
原理:
a、第一次下载资源的时候,客户端会保存修改时间
b、第二次下载资源的时候,客户端上传修改时间,服务端决定返回200还304.
----这种时间不一定准,所以请求的时候一般会加上一个时间戳或版本号信息强制刷新。
2.Nginx静态页面缓存
配置nginx的缓存策略,含名称、存放位置、存放大小限制、有效期和状态信息,其中key为url信息。
如果url不变,就算上游服务器挂了,也能从nginx中直接获取。缺点是上游服务器变了,由于url没变,缓存数据无法刷新。所以解决nginx缓存刷新的关键在于url的变更,可以加上时间戳。
3.CDN内容分发缓存
CDN的全称是Content Delivery Network,即内容分发网络,是一组分布在多个不同地理位置的Web服务器,目的是使用户能就近地获取请求数据,解决网络拥塞,提高访问速度,解决由于网络带宽小、用户访问量大、网点分布不均等原因导致的访问速度慢的问题。CDN能够缓存JavaScript脚本、CSS样式表、图片、图标、Flash等静态资源文件(不包括html页面),这些静态资源文文件的访问频率很高,将其缓存在CDN可以极大地提高网站的访问速度。
原理:能够将静态资源缓存到全国各地节点能够减少客户端与cdn带宽距离传输提高响应速度; 就近原则
为什么将静态资源存放到第三方服务器效率非常高呢?
1M公网带宽的理论下载速度是128k/s,一张图如果2M,则需要16s,如果并发量很高,则速度会非常的慢,而且非常的占用带宽,而且还和传输的距离有关系。
如果图片过大的情况下,建议将一张大图拆分n多个小图加载;
为了解决以上问题,可以使用第三方服务器,因为
1、云服务器签订带宽都是将T算的,价格更便宜
2、CDN内容分发,能够将静态资源缓存到全国各地节点能够减少客户端与cdn带宽距离传输提高响应速度; 就近原则。
传统方式架构弊端?
a.带宽传输压力大
b.因为所有用户全部聚集到同一个地区服务器上访问,无法保证整体的系统高可用
c.因为如果客户端与服务器端传输距离越远,那么宽带传输非常耗资源,导致用户体验非常差,响应慢。
CDN安全控制或还提供了其他什么服务?
防止DDOS攻击、DNS负载均衡、实现WEB安全防御功能,比如黑名单和白名单
4.服务端SpringBoot整合Redis缓存
a、启动的配置文件上加上注解@EnableCaching
b、使用的地方加上注解
@Cacheable(cacheNames = "case",key = "'caseDetail'")
cachenames相当于文件夹,后面的key为具体的key,key一定要加上单引号,不加会报错
缓存的内容必须要实现序列化
----存在数据库和redis同步性问题。
5.其他缓存
和redis缓存一样的Ehcache、Memcache等第三方缓存、JVM自带内置缓存、数据库缓存
6.缓存需要考虑的问题
1、Redis与数据库一致性问题:mq订阅binlog,可同步数据一致性问题
2、JVM与Redis保持一致性问题:出现不一致的时候,同步数据库的值为一致。
3、Nginx缓存与服务器端真实缓存一致问题:
a. 使用版本号控制
b. 手动清除Nginx缓存,需要物理删除
c. 使用lua+openresty实现动态商品详情页面
作者:架构师_迦叶
链接:https://www.jianshu.com/p/e0942ce411dc
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?