缓存定义:存储在计算机上的一个原始数据复制集, 以便于访问。
客户端缓存:
页面缓存
页面缓存有两层含义: 一个是页面自身对某些元素或全部元素进行缓存;另一层意思 是服务端将静态页面或动态页面的元素进行缓存, 然后给客户端使用。 这里的页面缓存指 的是页面自身的缓存或者离线应用缓存。页面缓存是将之前渲染的页面保存为文件, 当用户再次访问时可以避开网络连接, 从而减少负载, 提升性能和用户体验。 随着单页面应用 (Single Page Application, SPA) 的广泛使用, 加之 HTML5 支持了离线缓存和本地存储, 大部分 BS 应用的页面缓存都可以举重若轻了。
浏览器缓存
浏览器缓存是通常只要一次会话。浏览器会在硬盘上专门开辟一个空间来存储资源副 本作为缓存。在用户触发”后退"操作或点击一个之前看过的链接的时候,浏览器缓存会 很管用。用户触发”后退"操作或点击一个之前看过的链接的时候,浏览器缓存会 很管用。同样,如果访问系统中的同一张图片,该图片可以从浏览器缓存中调出并立即显示出来
APP上的缓存
APP使用数据库缓存的方法:在下载完数据文件后, 把文件的相关信息, 如URL、路径、下载时间、 过期时间等存放到数据库, 下次下载的时候根据URL先从数据库中查询, 如果查询到当前时间并未过期, 就根据路径读取本地文件, 从而实现缓存的效果。 这种方法具有灵活存放文件的属性, 进而提供了很大的扩展性, 可以为其他的功能提供良好的支
持。需要注意的是, 要留心数据库缓存的清理机制。
对千APP中的某些界面, 可以采用文件缓存的方法。 这种方法使用文件操作的相关 API得到文件的最后修改时间, 与当前时间判断是否 过期, 从而实现缓存效果, 操作简单,
代价较低。需要注意的是, 不同类型文件的缓存时间不一样。
网络中的缓存
网络中的缓存位于客户端和服务端之间, 代理或响应客户端的网络请求, 从而对重复的请求返回缓存中的数据资源。 同时, 接受服务端的请求, 更新缓存中的内容。
Web 代理缓存
Web代理几乎是伴随着互联网诞生的, 常用的Web代理分为正向代理、 反向代理和透明代理。 Web代理缓存是将Web代理作为缓存的一种技术。
为了从源服务器取得内容, 用户向代理服务器发送一个请求并指定目标服务器, 然后 代理服务向源服务器转交请求并将获得的内容返回给客户端。 一般地, 客户端要进行一些特别的设置才能使用正向代理。
反向代理与正向代理相反, 对于客户端而言代理服务器就像是源服务器, 并且客户端不需要进行设置。 客户端向反向代理发送普通请求, 接着反向代理将判断向何处转发请求,并将从源服务器获得的内容返回给客户端。透明代理的意思是客户端根本不需要知道有代理服务器的存在, 由代理服务器改变客 户端请求的报文字段, 并会传送真实的IP地址。 加密的透明代理属千匿名代理, 不用设置 就可以使用代理了。 透明代理的例子就是时下很多公司使用的行为管理软件。
这里的Web代理缓存是指使用正向代理的缓存技术。 Web代理缓存的作用跟浏览器的 内置缓存类似, 只是介于浏览器和互联网之间。
当通过代理服务器进行网络访问时, 浏览器不是直接到Web服务器去取回网页而是向Web代理发出请求, 由代理服务器来取回浏览器所需要的信息并传送给浏览器。 而且, Web代理缓存有很大的存储空间, 不断将新获取的数据储存到本地的存储器上, 如果浏览器所 请求的数据在Web代理的缓存上已经存在而且是最新的, 那么就不重新从Web服务器取数据,而是直接将缓存的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。对于企业而言,使用Web代理既可以节省成本,又能提高性能。
对于Web代理缓存而言,较流行的是Squid,它支持建立复杂的缓存层级结构,拥有详细的日志、高性能缓存以及用户认证支持。Squid同时支持各种插件,例如,SquidGuard 就是一个提供URL过滤的插件,对于屏蔽某些站点和内容十分有用。如果需要分析Squid的各种指标,webalizer应该是个不错的选择。
边缘缓存
使用Web反向代理服务器和使用正向代理服务器一样,可以拥有缓存的作用,反向代理缓存可以缓存原始资源服务器的资源,而不是每次都要向原始资源服务器请求数据,特别是一些静态的数据,比如图片和文件,很多Web服务器就具备反向代理的功能,比如大名鼎鼎的Nginx。
如果这些反向代理服务器能够做到和用户来自同一个网络,那么用户访问反向代理服 务器,就会得到很高质量的响应速度,所以可以将这样的反向代理缓存称为边缘缓存。边缘缓存在网络上位于靠近用户的一侧,可以处理来自不同用户的请求,主要用千向用户提 供静态的内容,以减少应用服务器的介入。边缘缓存的一个有名的开源工具就是Varnish, 在默认情况下进行保守缓存。也就是说,Varnish只缓存它所知的安全内容。Varnish的一个特性是使用虚拟内存,精妙之处在于利用了操作系统的管理机制。Varnish可以高度定制如何处理请求,缓存哪些内容。
边缘缓存中典型的商业化服务就是CDN了,例如AWS的CloudFront, 我国的
ChinaCache 等, 现在一般的公有云服务商都提供了 CDN 服务。 CDN 是 Content Delivery
Network的简称
服务端缓存
服务端缓存是整个缓存体系中的重头戏, 从网站的架构演进中已经看到了服务端缓存 是系统性能的重中之重了。 数据库是整个系统中的 "慢性子”,有时候数据库调优能够以小搏大, 在不改变架构和代码逻辑的前提下, 缓存参数的调整往往是条捷径。 在系统开发的 过程中, 可以直接在平台侧使用缓存框架, 当缓存框架无法满足系统对性能的要求时, 就 需要在应用层自主开发应用级缓存了, 即使利用可供参考的开源架构, 应用级缓存的开发也是一件有挑战的事情。
数据库缓存
数据库属千IO密集型的应用, 主要负责数据的管理及存储。 数据库缓存是一类特殊的 缓存, 是数据库自身的缓存机制。 大多数数据库不需要配置就可以快速运行, 但并没有为 特定的需求进行优化。 在数据库调优的时候, 缓存优化是一项很重要的工作。
以MySQL为例,MySQL中使用了查询缓冲机制, 将SELECT语句和查询结果存放在 缓冲区中, 以后对千同样的SELECT语旬, 将直接从缓冲区中读取结果, 以节省查询时间, 提高了SQL查询的效率。MySQL 在接收到一条select语句的请求后,如果该语旬满足Query Cache的要求, MySQL会直接根据预先设定好的HASH算法将接收到的select语句以字符串方式进行hash, 然后到Query Cache中直接查找是否 已经缓存 。也就是说,如果已经有 结 果在缓存中, 该 select 请求就会直接将数据返回, 从而省略了后面所有的步骤(如SQL语句的解析, 优化器优化以及向存储引擎请求数据等), 从而极大地提高了性能。当然, 当数据变化非常频繁的情况下, 使用Query Cache可能会得不偿失。
Query Cache的使用需要多个参数配合, 其中最为关键的是query
本文介绍了缓存的多种类型,包括客户端的页面缓存和浏览器缓存,APP上的数据库缓存和文件缓存,网络中的Web代理缓存、边缘缓存和反向代理缓存,以及服务端的数据库缓存。重点讨论了各种缓存的工作原理和应用场景,强调了服务端缓存特别是数据库缓存在系统性能优化中的重要性。
1061

被折叠的 条评论
为什么被折叠?



