首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Nginx缓存详解(一)之客户端缓存

通常对于静态资源,即不经常更新的资源,如图片,CSS或JS等进行缓存,而不用每次都向服务器请求,这样就可以减轻服务器的压力。 缓存的分类 缓存可以分为客户端缓存和服务端缓存。...客户端判断缓存是否过期和先前请求时服务端返回的HTTP消息头字段有关: 服务端返回字段 作用 Cache-Control: max-age=x 客户端缓存时间超出x秒后则缓存过期。...如果Web服务器返回304,则客户端使用本地缓存,如果返回200,则使用Web服务器返回的新的数据。 Cache-Control: no-store 客户端不能对响应进行缓存。...协商缓存 协商缓存原理: 当客户端向服务端发起请求时,服务端会检查请求中是否有对应的标识(If-Modified-Since或Etag),如果没有对应的标识,服务器端会返回标识给客户端客户端下次再次请求的时候...当客户端第一次发起请求时,Etag的值在响应头中传递给客户端;当客户端再次发起请求时,如果验证完本地内容缓存后需要发起服务端验证,Etag的值将由请求消息头的If-None-Match字段传递给服务端。

2.1K40

亿及流量多级缓存 - 客户端缓存

文档整理于 马士兵教育 服务并发化 其他缓存 客户端 浏览器缓存 首先,限定在get请求 由于浏览器缓存涉及到的应用比较多,所以针对不同的应用和版本效果也会有差异 浏览器:chrome 服务器:nginx...Cache-Control缓存头,分为响应头和请求头 标记 类型 功能 public 响应头 响应的数据可以被缓存客户端和代理层都可以缓存 private 响应头 可私有缓存客户端可以缓存,代理层不能缓存...s-maxage 请求和响应 用户代理层缓存,CDN下发,当客户端数据过期时会重新校验 max-stale 请求和响应 缓存最大使用时间,如果缓存过期,但还在这个时间范围内则可以使用缓存数据 min-fresh...因为HTTP 规范是允许客户端在某些特殊情况下直接使用过期缓存的,比如校验请求发送失败的时候。那么带有must-revalidate的缓存必须校验,其他条件全部失效。...对于js,css这类可以缓存很久的数据,可以通过加版本号的方式更新内容 不需要强一致性的数据,可以缓存几秒 异步加载的接口数据,可以使用ETag来校验。

89130
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Etcd 客户端缓存实践

    Etcd Watch 机制 在启用缓存之后就会面临本地缓存更新的问题,因为 etcd 是一个分布式的 KV 存储,允许多个客户端并发操作并保证一致性,那么如果其他客户端更新了 etcd 中的数据,那么如何更新本客户端本地缓存中的数据呢...客户端缓存的实现 有了 etcd 的 watch 机制和 revision 我们就可以实现一个客户端缓存。...... } } } Ok(From::from(resp))} Put 请求和 Delete 请求 Put 请求和 Delete 请求都是修改操作,处理方式基本相同...我们来假设这样一个场景,本地主机上有两个进程,分别起了两个客户端,也就对应了两份缓存。...总    结 本文介绍了如何基于 etcd 的 watch 机制来实现客户端缓存,有了客户端缓存,极大地降低了访问 etcd 的延迟并提高了吞吐,非常适合读多写少的场景。

    1K20

    Redis 6 客户端缓存

    Redis服务器辅助的客户端缓存 客户端缓存是一种用于创建高性能服务的技术。它利用应用服务器中的可用内存,这些服务器通常是与数据库节点不同的计算机,以便将数据库信息的某些子集直接存储在应用程序端。...此外,每个更改数据的应用程序查询都需要使用PUBLISH命令,这会使数据库花费更多的CPU时间来处理该命令。...客户端缓存的Redis实现 Redis客户端缓存支持称为跟踪,有两种模式: 在默认模式下,服务器会记住给定客户机访问的密钥,并在修改相同的密钥时发送无效消息。...为此,Redis使用了两个关键思想来限制服务器端的内存使用量,以及处理实现该功能的数据结构的CPU成本: 服务器会记住可能已在单个全局表中缓存给定键的客户端列表。这个表叫做失效表。...客户端将收到关于它没有缓存的对象的无效消息。

    1.8K40

    前端缓存处理

    前端缓存处理 在开发过程中,总有一些使用频率很高的接口,数据内容还不基本不修改的数据。为了提高效率,自然要放到缓存中。 后端将数据放入redis,那么前端放到哪呢?...1.前端的缓存位置区别: 简单说明,详细区别可自行百度。 localStorage: 永久保存,浏览器关闭也不会消失。除非手动清除数据。...sessionStorage:暂时保存,缓存的数据时间是会话级别的。不会永久保存。...我是做java的,js并不是非常熟悉,把这个方案想出来用了一两天的时间。 最开始没有这个方法并没有加异步,写完了这个工具类之后发现系统第一次调用的时候,方法已经结束了但是没有获取到值。...(最开始不太明白js的异步执行规则,后来才知道的) 加上异步之后就可以解决这个问题了,调用的时候会把数据获取到再返回。

    52740

    亿级流量客户端缓存之Http缓存与本地缓存对比

    客户端缓存分为Http缓存和本地缓存,使用缓存好处很多,例如减少相同数据的重复传输,节省网络带宽资源缓解网络瓶颈,降低了对原始服务器的要求,避免出现过载,这样服务器可以更快响应其他的请求 Http缓存...http缓存分文强制缓存和协商缓存,主要用来在客户端存储一些不经常变化的的静态文件,像图片、CSS、JS等。...Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。...对于js,css这类可以缓存很久的数据,可以通过加版本号的方式更新内容 不需要强一致性的数据,可以缓存几秒 异步加载的接口数据,可以使用ETag来校验。...兜底数据 在服务器崩溃和网络不可用的时候展示 临时缓存 退出即清理 固定缓存 展示框架这种,可能很长时间不会更新,可用随客户端下发 父子连 页面跳转时有一部分内容不需要重新加载,可用从父菜单带过来 预加载

    1.8K20

    Apache 站点优化-客户端缓存

    所以我们通过静态缓存的方式,将这些不常变化的数据缓存到用户本地磁盘,用户以后再访问这些请求,直接从本地磁盘打开加载,这样的好处是加载速度快,且节约公司带宽及成本。...应用场景:数据缓存 优化目的:提升用户访问页面加载速度,节约带宽 二、静态缓存实现 1)修改apache主配置文件,加载缓存模块 LoadModule expires_module modules/mod_expires.so...2)针对虚拟主机或者目录设置缓存策略 #开启缓存 ExpiresActive on #针对不同类型元素设置缓存时间...') 相当于access modification 从修改时间算起 缓存时间单位 years months weeks days hours minutes seconds 三、验证测试 *缓存没有生效前...缓存生效后测试 响应头中加载了缓存字段 Cache-control 和 Expires,并且缓存的时间和我们预设的一致,成功啦。

    80520

    客户端写得LRU缓存

    前言 由于我们的客户端的元素和资源比较多,cocos框架的各种库质量参差不齐,导致了有些地方加载速度实在很慢。并且没有一个统一的内存管理机制导致了整个内存占用不太好控制。...LRU实现设计 由于最主要还是由客户端的问题引起的,所以最先还是考虑客户端的需求。...在实际使用过程中加入了自动调整各类上下限阈值的边界,因为在客户端场景里,有时候触发主动GC之后,有些资源会过一会再回收资源或在下一个关键点再回收。这会导致短时间内频繁触发主动GC。...客户端上的应用 实际缓存池的实际使用过程中还是碰到了一些问题的。...所以后来不得不对cocostudio创建的节点做缓存。然而如果是一开始就使用这个缓存的话就比较容易发现问题,我们中途开始切入这个缓存的话就发现。

    2.1K10

    项目实战|缓存处理

    前言 在之前的博客中,我们使用过工厂、代理模式来封装原生的缓存方法,这一篇我们将缓存方法的细节处理优化一下,来提高项目质量 Stroage封装 基础封装 class Storage { constructor...(props = {}) { // 根据类型跟缓存时间,初始化缓存方法 const { type = 'local', time = 5000, cacheSize = 2.5 } =...setItem(key, value) { // 代理原生缓存方法,添加缓存时间 if (!...localStorage 中一般浏览器支持的是5M大小,在不同内核的浏览器中 localStorage 会有所不同,所以我们在使用缓存的时候要注意不能超过最大缓存。...处理超过缓存最大 size 的情况 当我们的数据不得不进行缓存且数据量超过我们预设的最大缓存大小的时候,可以有如下两种方案来解决: 数据按照先进先出的原则,将最先存入的缓存数据删除,直到缓存大小能够将新数据存入为止

    44120

    Mybatis缓存处理机制

    一、MyBatis缓存介绍   正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session...二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。   ...对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。...映射语句文件中的所有select语句将会被缓存。   2. 映射语句文件中的所有insert,update和delete语句会刷新缓存。   3....缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回。   4. 缓存会根据指定的时间间隔来刷新。   5.

    37220

    缓存雪崩的处理办法

    mysql的server层的优化器决定的 2.Memcache和Redis单个key大小限制 Memcache单个key(变量)存放的数据有1M的限制 Redis单个key(变量)存放的数据有1G的限制 3.缓存雪崩的处理办法...事前:进行系统压力测试,在负载均衡层做限流处理,过载丢弃请求或者进入队列 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。...Redis中缓存雪崩、缓存穿透等问题的解决方案 缓存穿透、缓存并发、缓存雪崩、缓存抖动、热点缓存缓存双写一致性等问题 4.分布式id算法?...13.PHP模式修饰符 模式修饰符 含义 i:正则表达式匹配时不区分大小写 m:不加m时,被匹配的字符串被当成整体一行处理,^匹配开始位置,$匹配结束位置或匹配最后一个换行符; 加m时,被匹配的字符串通过换行符当成多行处理...指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。 【机器码】计算机直接使用的程序语言,其语句就是机器指令码。

    73121

    go: 缓存过期问题处理

    当我们在使用缓存时,经常会遇到缓存过期时间过长,导致缓存中的数据已经过时,但是缓存中的数据仍然被使用的情况。这种情况下,我们需要一种方法来确保缓存中的数据在过期后能够及时更新。...在本文中,我们将讨论如何实现一个完善的缓存更新方案,以解决缓存因时间修改超前一直不会被更新的问题。 解决方案 为了解决这类问题,我们可以使用一个定时器来定期更新缓存中的数据。...我们还定义了两个方法 IsExpired 和 Update,用于检查缓存是否过期和更新缓存中的数据。 在 main 函数中,我们启动了一个定时器,定期检查缓存是否过期。...如果缓存过期了,我们就调用 Update 方法来更新缓存中的数据。 总结 在本文中,我们讨论了缓存因时间修改超前一直不会被更新的问题,并提出了一种解决方案,即使用定时器来定期更新缓存中的数据。...当我们在使用缓存时,一定要注意缓存的过期时间,以确保缓存中的数据不会过时。如果缓存过期时间过长,我们就需要使用类似上面的方案来定期更新缓存中的数据,以确保缓存中的数据始终是最新的。

    38960

    Ajax 对缓存处理

    缓存 浏览器的一次请求需要从服务器获得许多css、img、js等相关的文件,如果每次请求都把相关资源文件加载一次,对带宽、服务器资源、用户等待时间都有严重的损耗,浏览器有做优化处理,就是把css、img...、js等文件在第一次请求成功后就在本地保留一个缓存备份,后续的每次请辞u就在本身获得相关的缓存资源文件就可以了,可以明显地加快用户的访问速度。...css、img、js等文件可以缓存,但是动态程序文件例如PHP文件不能进行缓存,即使缓存我们也不要其缓存效果。...浏览器对动态程序文件缓存处理解决: 给请求的地址设置随机数【推荐】; 给动态程序设置header头信息,禁止浏览器对其缓存。 给请求的地址设置随机数 Ajax对缓存处理</title

    83720

    AFNetWorking用法及缓存处理

    @",manager.requestSerializer.HTTPRequestHeaders); 在下载请求中,经常会请求一些不长变化的数据,如果每次APP启动都进行请求,会消耗许多资源,并且有时候缓存处理...在AFNETWorking中,并没有提供现成的缓存方案,我们可以通过写文件的方式,自行做缓存。...GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {         //写缓存...";         if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) {             //从本地读缓存文件...我们还应该做一个保护机制的处理, //初始化一个下载请求数组 NSArray * requestArray=[[NSMutableArray alloc]init]; //每次开始下载任务前做如下判断

    50220

    客户端js js脚本的引入 js的解析过程

    web浏览器中的JavaScript web浏览器中的js通常称为客户端的JavaScript 客户端 JavaScript window对象是所有客户端JavaScript特性和api的主要接入点。...在core.js执行的时候读取这段文本,然后动态执行一次。浏览器不会执行之间的代码 html中的事件处理程序 当脚本所在的html文件被载入的时候。脚本里的js会执行一次。...为了可交互,js会定义事件处理程序即web浏览器先注册函数,并在之后调用其作为事件的响应。其中事件处理程序的属性可以包含任意条js语句。相互之间用逗号分隔。...js程序执行的阶段 一阶段 载入文档内容,执行所有脚本,一般是从上到下的 二阶段 文档载入完毕,所有脚本执行完毕。js进入第二阶段,该阶段为异步,由事件驱动。web会调用事件处理程序,对事件进行处理。...客户端js线程模型 js客户端为单线程模型。 h5中有一种并发的控制方式,为web worker 为一个后台线程,允许线程里的代码访问文档的内容。

    13.1K80

    JS篇(014)-一次js请求一般情况下有哪些地方会有缓存处理

    答案:DNS缓存,CDN缓存,浏览器缓存,服务器缓存。 解析: 1、DNS缓存 DNS缓存指DNS返回了正确的IP之后,系统就会将这个结果临时储存起来。...所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了。...2、CDN缓存 和Http类似,客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,拿过来用,如果过期,就向CDN边缘节点发起请求。...CDN便会检测被请求的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。和买家买货,卖家没货,卖家再进货一个道理^^。...浏览器缓存主要有两类:缓存协商:Last-modified ,Etag 和彻底缓存:cache-control,Expires。浏览器都有对应清除缓存的方法。

    82810

    AFNetWorking用法及缓存处理

    @",manager.requestSerializer.HTTPRequestHeaders); 在下载请求中,经常会请求一些不长变化的数据,如果每次APP启动都进行请求,会消耗许多资源,并且有时候缓存处理...在AFNETWorking中,并没有提供现成的缓存方案,我们可以通过写文件的方式,自行做缓存。...GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {         //写缓存...";         if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) {             //从本地读缓存文件...我们还应该做一个保护机制的处理, //初始化一个下载请求数组 NSArray * requestArray=[[NSMutableArray alloc]init]; //每次开始下载任务前做如下判断

    59820
    领券