首页
学习
活动
专区
工具
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 的时候,如果缓存命中,则只需要访问一次本地内存省掉一次网络开销,如果没有命中,再到 etcd 中查询,并将查询结果加入缓存,这极大地降低了频繁查询...Etcd Watch 机制 在启用缓存之后就会面临本地缓存更新的问题,因为 etcd 是一个分布式的 KV 存储,允许多个客户端并发操作并保证一致性,那么如果其他客户端更新了 etcd 中的数据,那么如何更新本客户端本地缓存中的数据呢...客户端缓存的实现 有了 etcd 的 watch 机制和 revision 我们就可以实现一个客户端缓存。...我们来假设这样一个场景,本地主机上有两个进程,分别起了两个客户端,也就对应了两份缓存。...总    结 本文介绍了如何基于 etcd 的 watch 机制来实现客户端缓存,有了客户端缓存,极大地降低了访问 etcd 的延迟并提高了吞吐,非常适合读多写少的场景。

    1K20

    Redis 6 客户端缓存

    Redis服务器辅助的客户端缓存 客户端缓存是一种用于创建高性能服务的技术。它利用应用服务器中的可用内存,这些服务器通常是与数据库节点不同的计算机,以便将数据库信息的某些子集直接存储在应用程序端。...不管使用什么模式,有一个简单的事实:许多非常大的应用程序实现某种形式的客户端缓存,因为这是拥有快速存储或快速缓存服务器的下一个逻辑步骤。...客户端缓存的Redis实现 Redis客户端缓存支持称为跟踪,有两种模式: 在默认模式下,服务器会记住给定客户机访问的密钥,并在修改相同的密钥时发送无效消息。...然而,许多客户端实现可能更喜欢使用两个独立的连接来实现客户端缓存:一个用于数据,另一个用于无效消息。因此,当客户端启用跟踪时,它可以指定通过指定不同连接的“客户端ID”将无效消息重定向到另一个连接。...客户端将收到关于它没有缓存的对象的无效消息。

    1.8K40

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

    客户端缓存分为Http缓存和本地缓存,使用缓存好处很多,例如减少相同数据的重复传输,节省网络带宽资源缓解网络瓶颈,降低了对原始服务器的要求,避免出现过载,这样服务器可以更快响应其他的请求 Http缓存...http缓存分文强制缓存和协商缓存,主要用来在客户端存储一些不经常变化的的静态文件,像图片、CSS、JS等。...cache 是从磁盘当中取出的,也是在已经在之前的某个时间加载过该资源,不会请求服务器但是此资源不会随着该页面的关闭而释放掉,因为是存在硬盘当中的,下次打开仍会from disk cache 不做深入研究 js...对于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

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

    web浏览器中的JavaScript web浏览器中的js通常称为客户端的JavaScript 客户端 JavaScript window对象是所有客户端JavaScript特性和api的主要接入点。...url中的js 应用用途 书签 通过协议类型指定url内容为任意字符串,该字符串是会被js解释器运行的js代码,其会被当成单独的一行代码实现。即语句之间必须使用分号作为分割。 即,书签的实现。...不会出现js阻塞页面ui的渲染。异步的时候执行是无序。 事件驱动的js js还能通过注册事件程序函数写程序。之后在发生该事件的时候异步调用这些函数。...客户端js线程模型 js客户端为单线程模型。 h5中有一种并发的控制方式,为web worker 为一个后台线程,允许线程里的代码访问文档的内容。...客户端js时间线 web浏览器先创建document对象,并且开始解析web页面,(即根节点),解析html元素和其文本内容都会添加到其后方的节点中 html遇到script元素的时候,先执行内部脚本,

    13.1K80

    使用传统前端技术增强客户端缓存能力

    使用传统前端技术增强客户端缓存能力 前几天重构之后,Lighthouse 中有一个评分让我念念不忘: ProgressiveWebApp。...浏览器客户端代码 说到 PWA ,我们能直接想到的,无非是 增强缓存 和 推送能力。而这两个能力,都是 ServiceWorker API 实现的。...上面介绍浏览器客户端代码的时候,有引入一个外部脚本依赖 sw.js。...,建议还是进行压缩,进一步提高页面性能(哪怕它是独立于客户端脚本另外的异步进程)。...另外,你也不需要担心 sw.js缓存后,这个站点变成“完全离线”。因为 sw.js 按照规范可以保证它的最长存在生命周期是 1天,也就是说,未来你的策略更新最多延迟1天。

    78710

    带你100% 地了解 Redis 6.0 的客户端缓存

    近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis...我们今天就依次聊一下客户端缓存的必要性、具体使用、原理分析和实现。 为什么需要客户端缓存?...功能介绍和演示 下面使用 Docker 安装 Redis 6.0.1,然后使用 telnet 来简单演示一下 Redis 6.0 的客户端缓存功能。...client tracking off+OK 广播模式 Redis 还提供了一种广播模式(BCAST),它是另外一种客户端缓存的实现方式。...客户端缓存的相关操作就是对该数据的增删改查: 当开启 track 功能的客户端获取某一个键值时,Redis 会调用 enableTracking 方法使用基数树记录下该 key 和 clientId 的映射关系

    1.7K20

    「最强」Lettuce 已支持 Redis6 客户端缓存

    Redis 客户端缓存 缓存的解决方案一般有两种: 【L1】 内存缓存(如 Caffeine、Ehcache) —— 速度快,进程内可用,但重启缓存丢失,出现缓存雪崩的问题。...如下 J2Cache 两级缓存框架 hotkey 热点数据实时同步 在 redis 6.0 版本中,已经默认支持了客户端缓存功能,Java 中主流的连接客户端 lettuce 在最新的快照版本 (6.0.0...下边就通过代码来体验一下客户端缓存的神奇功能。...我们可以通过以下监控看下客户端具体的操作细节 监控 ....57483] "GET" "k1" # 由于k1 值发生变化,循环 会重新查询redis-server 如上: 虽然是个死循环,但是关于 redis 操作只有以上注释的几条,说明客户端缓存生效

    1.4K20

    【译】antirez:Redis6将支持客户端缓存

    有两个主要的原因,一是需要给客户端提供更加具有语义的回复,二是提供一个旧版本不能实现的新功能:客户端缓存。 时间倒回一年前,我到达圣安东尼奥的Redis Conf 2018。...当时公司就有一个共识是客户端缓存是Redis在未来非常重要的事情。如果我们需要更快的存储和更快的缓存,我们就需要在客户端存储一部分信息。这是提供低延迟和大规模数据服务的很自然的想法。...在客户端是否缓存了key呢?要记住缓存每个key和收到失效消息时的时间戳,记住每个slot的失效时间。...key,Redis将会检查失效表,发现客户端123和444都缓存了这个slot上的key。...我们将会给这些客户端发送失效信息,然后会记录下slot最后的失效时间戳,并在以后懒检查缓存对象的时间戳,并对照后判断是否失效。此外,客户端可以回收表中缓存的指定slot的对象。

    73820

    带你100% 地了解 Redis 6.0 的客户端缓存

    近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis...我们今天就依次聊一下客户端缓存的必要性、具体使用、原理分析和实现。 为什么需要客户端缓存?...功能介绍和演示 下面使用 Docker 安装 Redis 6.0.1,然后使用 telnet 来简单演示一下 Redis 6.0 的客户端缓存功能。...client tracking off +OK 广播模式 Redis 还提供了一种广播模式(BCAST),它是另外一种客户端缓存的实现方式。...客户端缓存的相关操作就是对该数据的增删改查: 当开启 track 功能的客户端获取某一个键值时,Redis 会调用 enableTracking 方法使用基数树记录下该 key 和 clientId 的映射关系

    1.4K01
    领券