当前位置: 首页 > news >正文 山东网站建设公司哪家专业网上的推广公司 news 2025/10/23 20:36:57 山东网站建设公司哪家专业,网上的推广公司,好看的设计网站,数字广东网络建设有限公司总经理前言 提到缓存#xff0c;想必每一位软件工程师都不陌生#xff0c;它是目前架构设计中提高性能最直接的方式。 缓存技术存在于应用场景的方方面面。从网站提高性能的角度分析#xff0c;缓存可以放在浏览器#xff0c;可以放在反向代理服务器#xff0c;还可以放…前言 提到缓存想必每一位软件工程师都不陌生它是目前架构设计中提高性能最直接的方式。 缓存技术存在于应用场景的方方面面。从网站提高性能的角度分析缓存可以放在浏览器可以放在反向代理服务器还可以放在应用程序进程内同时可以放在分布式缓存系统中。 从用户请求数据到数据返回数据经过了浏览器CDNNginx代理缓存应用服务器以及数据库各个环节。每个环节都可以运用缓存技术。 缓存的请求顺序是用户请求 → HTTP 缓存 → CDN 缓存 → Nginx代理缓存 → 进程内缓存 → 分布式缓存。 在技术的架构每个环节都可以加入缓存我们看看每个环节是如何应用缓存技术的。 2. HTTP缓存 通常 HTTP 缓存策略分为两种 - 强缓存 - 协商缓存。 从字面意思我们可以很直观的看到它们的差别 - 强缓存即强制直接使用缓存。 - 协商缓存就得和服务器协商确认下这个缓存能不能用。 强缓存 强缓存不会向服务器发送请求直接从缓存中读取资源在 chrome 控制台的 network 选项中可以看到该请求返回 200 的状态码并且size显示from disk cache或from memory cache; 协商缓存 协商缓存会先向服务器发送一个请求服务器会根据这个请求的 request header 的一些参数来判断是否命中协商缓存如果命中则返回 304 状态码并带上新的 response header 通知浏览器从缓存中读取资源。 2.1 HTTP 缓存控制 在 HTTP 中我们可以通过设置响应头以及请求头来控制缓存策略。 强缓存可以通过设置Expires和Cache-Control 两种响应头实现。如果同时存在Cache-Control优先级高于Expires。 Expires Expires 响应头它是 HTTP/1.0 的产物。代表该资源的过期时间其值为一个绝对时间。它告诉浏览器在过期时间之前可以直接从浏览器缓存中存取数据。由于是个绝对时间客户端与服务端的时间时差或误差等因素可能造成客户端与服务端的时间不一致将导致缓存命中的误差。如果在Cache-Control响应头设置了 max-age 或者 s-max-age 指令那么 Expires 会被忽略。 Expires: Wed, 21 Oct 2015 07:28:00 GMTCache-Control Cache-Control 出现于 HTTP/1.1。可以通过指定多个指令来实现缓存机制。主要用表示资源缓存的最大有效时间。即在该时间端内客户端不需要向服务器发送请求。优先级高于 Expires。其过期时间指令的值是相对时间它解决了绝对时间的带来的问题。 Cache-Control: max-age315360000Cache-Control 有很多属性不同的属性代表的意义也不同。 可缓存性 - public 表明响应可以被任何对象(包括发送请求的客户端代理服务器等等)缓存。 - private 表明响应只能被单个用户缓存不能作为共享缓存(即代理服务器不能缓存它) - no-cache 不使用强缓存需要与服务器验协商缓存验证。 - no-store 缓存不应存储有关客户端请求或服务器响应的任何内容即不使用任何缓存。 过期 - max-age 缓存存储的最大周期超过这个周期被认为过期。 - s-maxage 设置共享缓存。会覆盖max-age和expires,私有缓存会忽略它 - max-stale[] 客户端愿意接收一个已经过期的资源可以设置一个可选的秒数表示响应不能已经过时超过该给定的时间。 - min-fresh 客户端希望在指定的时间内获取最新的响应 重新验证和重新加载 - must-revalidate 如页面过期则去服务器进行获取。 - proxy-revalidate 与must-revalidate 作用相同但是用于共享缓存。 其他 - only-if-cached 不进行网络请求完全只使用缓存。 - no-transform 不得对资源进行转换和转变。例如不得对图像格式进行转换。 协商缓存可以通过 Last-Modified/If-Modified-Since和ETag/If-None-Match这两对 Header 来控制。 2.2 Last-Modified、If-Modified-Since Last-Modified与If-Modified-Since 的值都是 GMT 格式的时间字符串代表的是文件的最后修改时间。 1.在服务器在响应请求时会通过Last-Modified告诉浏览器资源的最后修改时间。 2. 浏览器再次请求服务器的时候请求头会包含Last-Modified字段后面跟着在缓存中获得的最后修改时间。 3. 服务端收到此请求头发现有if-Modified-Since则与被请求资源的最后修改时间进行对比如果一致则返回 304 和响应报文头浏览器只需要从缓存中获取信息即可。如果已经修改那么开始传输响应一个整体服务器返回200 OK img srcimages/image-20220718222822409.png altimage-20220718222822409 stylezoom:80%; /但是在服务器上经常会出现这种情况一个资源被修改了但其实际内容根本没发生改变会因为Last-Modified时间匹配不上而返回了整个实体给客户端(即使客户端缓存里有个一模一样的资源)。为了解决这个问题HTTP/1.1 推出了Etag。Etag 优先级高与Last-Modified。 2.3 Etag、If-None-Match Etag都是服务器为每份资源生成的唯一标识就像一个指纹资源变化都会导致 ETag 变化跟最后修改时间没有关系ETag可以保证每一个资源是唯一的。 在浏览器发起请求浏览器的请求报文头会包含 If-None-Match 字段其值为上次返回的Etag发送给服务器服务器接收到次报文后发现 If-None-Match 则与被请求资源的唯一标识进行对比。如果相同说明资源没有修改则响应返 304浏览器直接从缓存中获取数据信息。如果不同则说明资源被改动过则响应整个资源内容返回状态码 200。 3. CDN缓存 CDNContent Delivery Network即内容分发网络它是构建在现有网络基础上的虚拟智能网络依靠部署在各地的边缘服务器通过中心平台的负载均衡、调度及内容分发等功能模块使用户在请求所需访问的内容时能够就近获取以此来降低网络拥塞提高资源对用户的响应速度。 本地存储和浏览器缓存带来的性能提升主要针对的是浏览器端已经缓存了所需的资源当发生二次请求相同资源时便能够进行快速响应避免重新发起请求或重新下载全部响应资源。 这些方法对于首次资源请求的性能提升是无能为力的若想提升首次请求资源的响应速度除了资源压缩、图片优化等方式还可借助CDN技术。 3.1 使用CDN网络资源获取过程 如果使用了CDN网络则资源获取的大致过程是这样的。 1.由于DNS服务器将对CDN的域名解析权交给了CNAME指向的专用DNS服务器所以对用户输入域名的解析最终是在CDN专用的DNS服务器上完成的。 2. 解析出的结果IP地址并非确定的CDN缓存服务器地址而是CDN的负载均衡器的地址。 3. 浏览器会重新向该负载均衡器发起请求经过对用户IP地址的距离、所请求资源内容的位置及各个服务器复杂状况的综合计算返回给用户确定的缓存服务器IP地址。 4. 对目标缓存服务器请求所需资源的过程。 这个过程也可能会发生所需资源未找到的情况那么此时便会依次向其上一级缓存服务器继续请求查询直至追溯到网站的根服务器并将资源拉取到本地。 3.2 CDN网络的核心功能包括两点 缓存与回源 缓存指的是将所需的静态资源文件复制一份到CDN缓存服务器上; 回源指的是如果未在CDN缓存服务器上查找到目标资源或CDN缓存服务器上的缓存资源已经过期则重新追溯到网站根服务器获取相关资源的过程。 4. Nginx代理缓存 用户请求在达到应用服务器之前会先访问 Nginx 负载均衡器如果发现有缓存信息直接返回给用户。 如果没有发现缓存信息Nginx 回源到应用服务器获取信息。 另外有一个缓存更新服务定期把应用服务器中相对稳定的信息更新到 Nginx 本地缓存中。 Nginx设置缓存有两种方式 - proxy_cache_path和proxy_cache - Cache-Control和Pragma 对于站点中不经常修改的静态内容(如图片JSCSS)可以在服务器中设置expires过期时间控制浏览器缓存达到有效减小带宽流量降低服务器压力的目的。 img srcimages/image-20220718224542963.png altimage-20220718224542963 stylezoom: 67%; /第一步客户端第一次向Nginx请求数据A; 第二步当Nginx发现缓存中没有数据A时会向服务端请求数据A; 第三步服务端接收到Nginx发来的请求则返回数据A到Nginx并且缓存在Nginx; 第四步Nginx返回数据A给客户端应用; 第五步客户端第二次向Nginx请求数据A; 第六步当Nginx发现缓存中存在数据A时则不会请求服务端; 第七步Nginx把缓存中的数据A返回给客户端应用。 默认情况下NGINX尊重Cache-Control源服务器的标头。它不缓存响应Cache-Control设置为PrivateNo-Cache或No-Store或Set-Cookie在响应头。NGINX只缓存GET和HEAD客户端请求。 如下配置可覆盖这些默认值 - proxy_buffering默认为on若proxy_buffering设置为off则NGINX不会缓存响应。 - proxy_ignore_headers可以配置忽略Cache-Control location /images/ {proxy_cache my_cache;proxy_ignore_headers Cache-Control;proxy_cache_valid any 30m;# ... }5. 进程缓存 通过了客户端CDNNginx代理缓存我们终于来到了应用服务器。应用服务器上部署着一个个应用这些应用以进程的方式运行着那么在进程中的缓存是怎样的呢? 进程内缓存又叫托管堆缓存以 Java 为例这部分缓存放在 JVM 的托管堆上面同时会受到托管堆回收算法的影响。 由于其运行在内存中对数据的响应速度很快通常我们会把热点数据放在这里。 在进程内缓存没有命中的时候我们会去搜索进程外的缓存或者分布式缓存。这种缓存的好处是没有序列化和反序列化是最快的缓存。缺点是缓存的空间不能太大对垃圾回收器的性能有影响。 目前比较流行的实现有 Ehcache、GuavaCache、Caffeine。这些架构可以很方便的把一些热点数据放到进程内的缓存中。 这里我们需要关注几个缓存的回收策略具体的实现架构的回收策略会有所不同但大致的思路都是一致的 - FIFO(First In First Out)先进先出算法最先放入缓存的数据最先被移除。 - LRU(Least Recently Used)最近最少使用算法把最久没有使用过的数据移除缓存。 - LFU(Least Frequently Used)最不常用算法在一段时间内使用频率最小的数据被移除缓存。 在分布式架构的今天多应用中如果采用进程内缓存会存在数据一致性的问题。 这里推荐两个方案 - 消息队列方案 应用在修改完自身缓存数据和数据库数据之后给消息队列发送数据变化通知其他应用订阅了消息通知在收到通知的时候修改缓存数据。 - 定时任务修改方案 为了避免耦合降低复杂性对“实时一致性”不敏感的情况下。每个应用都会启动一个定时任务定时从数据库拉取最新的数据更新缓存。 进程内缓存有哪些使用场景呢? - 场景一只读数据可以考虑在进程启动时加载到内存。当然把数据加载到类似 Redis 这样的进程外缓存服务也能解决这类问题。 - 场景二高并发可以考虑使用进程内缓存例如秒杀。 6. 分布式缓存 说完进程内缓存自然就过度到进程外缓存了。 与进程内缓存不同进程外缓存在应用运行的进程之外它拥有更大的缓存容量并且可以部署到不同的物理节点通常会用分布式缓存的方式实现。 分布式缓存是与应用分离的缓存服务最大的特点是自身是一个独立的应用/服务与本地应用隔离多个应用可直接共享一个或者多个缓存应用/服务。 为了提高缓存的可用性会在原有的缓存节点上加入 Master/Slave 的设计。当缓存数据写入 Master 节点的时候会同时同步一份到 Slave 节点。 一旦 Master 节点失效可以通过代理直接切换到 Slave 节点这时 Slave 节点就变成了 Master 节点保证缓存的正常工作。 每个缓存节点还会提供缓存过期的机制并且会把缓存内容定期以快照的方式保存到文件上方便缓存崩溃之后启动预热加载。 6.1 缓存雪崩 当缓存失效缓存过期被清除缓存更新的时候。请求是无法命中缓存的这个时候请求会直接回源到数据库。 如果上述情况频繁发生或者同时发生的时候就会造成大面积的请求直接到数据库造成数据库访问瓶颈。我们称这种情况为缓存雪崩。 从如下两方面来思考解决方案 缓存方面 - 避免缓存同时失效不同的 key 设置不同的超时时间。 - 增加互斥锁对缓存的更新操作进行加锁保护保证只有一个线程进行缓存更新。缓存一旦失效可以通过缓存快照的方式迅速重建缓存。对缓存节点增加主备机制当主缓存失效以后切换到备用缓存继续工作。 设计方面这里给出了几点建议供大家参考 - 熔断机制某个缓存节点不能工作的时候需要通知缓存代理不要把请求路由到该节点减少用户等待和请求时长。 - 限流机制在接入层和代理层可以做限流当缓存服务无法支持高并发的时候前端可以把无法响应的请求放入到队列或者丢弃。 - 隔离机制缓存无法提供服务或者正在预热重建的时候把该请求放入队列中这样该请求因为被隔离就不会被路由到其他的缓存节点。 - 如此就不会因为这个节点的问题影响到其他节点。当缓存重建以后再从队列中取出请求依次处理。 62. 缓存穿透 缓存一般是 KeyValue 方式存在一个 Key 对应的 Value 不存在时请求会回源到数据库。 假如对应的 Value 一直不存在则会频繁的请求数据库对数据库造成访问压力。如果有人利用这个漏洞攻击就麻烦了。 解决方法如果一个 Key 对应的 Value 查询返回为空我们仍然把这个空结果缓存起来如果这个值没有变化下次查询就不会请求数据库了。 将所有可能存在的数据哈希到一个足够大的 Bitmap 中那么不存在的数据会被这个 Bitmap 过滤器拦截掉避免对数据库的查询压力。 6.3 缓存击穿 在数据请求的时候某一个缓存刚好失效或者正在写入缓存同时这个缓存数据可能会在这个时间点被超高并发请求成为“热点”数据。 这就是缓存击穿问题这个和缓存雪崩的区别在于这里是针对某一个缓存前者是针对多个缓存。 解决方案导致问题的原因是在同一时间读/写缓存所以只有保证同一时间只有一个线程写写完成以后其他的请求再使用缓存就可以了。 比较常用的做法是使用 mutex(互斥锁)。在缓存失效的时候不是立即写入缓存而是先设置一个 mutex(互斥锁)。当缓存被写入完成以后再放开这个锁让请求进行访问。 Java最新课程 Java零基础视频教程(2022最新Java入门含斯坦福大学练习题力扣算法题 Java基础入门 java零基础自学首Java入门教程含Java项目和Java真题 Javaweb核心基础 JavaWeb基础教程Java web从入门到企业实战完整版 Spring Cloud最全微服务架构 史上最全面的springcloud微服务技术栈 SSM框架教程 SSM框架教程_SpringSpringMVCMaven高级Spring SpringBoot2全套视频教程 SpringBoot2全套视频教程springboot零基础到项目实战 文章转载自: http://www.morning.lsbjj.cn.gov.cn.lsbjj.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.yltnl.cn.gov.cn.yltnl.cn http://www.morning.jlthz.cn.gov.cn.jlthz.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.kzxlc.cn.gov.cn.kzxlc.cn http://www.morning.trplf.cn.gov.cn.trplf.cn http://www.morning.msgnx.cn.gov.cn.msgnx.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.monstercide.com.gov.cn.monstercide.com http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn http://www.morning.wwjft.cn.gov.cn.wwjft.cn http://www.morning.zmpqt.cn.gov.cn.zmpqt.cn http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn http://www.morning.lkhgq.cn.gov.cn.lkhgq.cn http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn http://www.morning.prmyx.cn.gov.cn.prmyx.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn http://www.morning.frllr.cn.gov.cn.frllr.cn http://www.morning.fylsz.cn.gov.cn.fylsz.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.fpxsd.cn.gov.cn.fpxsd.cn http://www.morning.bpmnx.cn.gov.cn.bpmnx.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.lmmh.cn.gov.cn.lmmh.cn http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.jqrp.cn.gov.cn.jqrp.cn http://www.morning.thntp.cn.gov.cn.thntp.cn http://www.morning.cljmx.cn.gov.cn.cljmx.cn http://www.morning.jyznn.cn.gov.cn.jyznn.cn http://www.morning.xfncq.cn.gov.cn.xfncq.cn http://www.morning.lgtzd.cn.gov.cn.lgtzd.cn http://www.morning.zqcsj.cn.gov.cn.zqcsj.cn http://www.morning.wrtxk.cn.gov.cn.wrtxk.cn http://www.morning.zrjzc.cn.gov.cn.zrjzc.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.lrmts.cn.gov.cn.lrmts.cn http://www.morning.prgnp.cn.gov.cn.prgnp.cn http://www.morning.mlwpr.cn.gov.cn.mlwpr.cn http://www.morning.rbknf.cn.gov.cn.rbknf.cn http://www.morning.wklhn.cn.gov.cn.wklhn.cn http://www.morning.mnlk.cn.gov.cn.mnlk.cn http://www.morning.yhrfg.cn.gov.cn.yhrfg.cn http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.fqsxf.cn.gov.cn.fqsxf.cn http://www.morning.yxshp.cn.gov.cn.yxshp.cn http://www.morning.lrskd.cn.gov.cn.lrskd.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn http://www.morning.trplf.cn.gov.cn.trplf.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn http://www.morning.gagapp.cn.gov.cn.gagapp.cn http://www.morning.jrlxz.cn.gov.cn.jrlxz.cn http://www.morning.mxtjl.cn.gov.cn.mxtjl.cn http://www.morning.kbdrq.cn.gov.cn.kbdrq.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.yfcyh.cn.gov.cn.yfcyh.cn http://www.morning.nzcgj.cn.gov.cn.nzcgj.cn http://www.morning.mtrz.cn.gov.cn.mtrz.cn http://www.morning.rxcqt.cn.gov.cn.rxcqt.cn http://www.morning.lhzqn.cn.gov.cn.lhzqn.cn http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn http://www.morning.tbqxh.cn.gov.cn.tbqxh.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.pwdrc.cn.gov.cn.pwdrc.cn http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.hpxxq.cn.gov.cn.hpxxq.cn 查看全文 http://www.tj-hxxt.cn/news/243457.html 相关文章: 移动端的网站北京做兼职从哪个网站好 校园网网站建设规划书建筑网上招工平台哪个好 免费的建筑设计网站求西北地区网站建设专家 西安沉睡网络 官方网址? 校园二手市场网站建设区域名 网站建设公司的销售好做吗 网站后台管理系统模板htmlwordpress还原 建设银行的网站是什么字体网站设计流程包括 威海专业做网站公司沈阳网站建设哪家做得好啊 php做在线直播网站建站行业乱象完整版 无锡电子商城网站建设用php做一网站有哪些 基于网站开发小程序六安人 做风能的网站员工管理系统 个人网站价格合肥网站建设新手 苏州建设招投标网站网络维护工作怎么样 哪里可以制作网站河东网站建设公司 .课程网站建设与应用域名权重查询工具 网站做备案关停会显示什么网站流量依赖率 建立一个网站需要多少钱?网站开发开题报告计划进度安排 可以发广告的100个网站网站开发项目 工作分解图 个人网站不能放广告怎么赚钱河源市地震 学院网站建设申请报告wap网站自动 互联网网站开发合同定制开发软件公司 专业网站建设新闻广东省建设工程交易中心网站 大良营销网站公司wordpress本地怎么搬家 网站建设要会什么软件做百度网站需要钱吗 一台服务器做两个网站吗wordpress 一键转发 网站rss怎么做江苏建设工程信息网一体化平台 怎样做好网站建设设计竞价推广案例 北京市住房城乡建设官方网站如何注册chn域名网站 网站模板 介绍wordpress原始密码 网站开发小图片杭州网站建设招聘网