页面输出缓存是现在互联网应用普遍采用的技术方案,因为页面输出缓存的性能与负载能力与静态 HTML 接近,但不需要像静态 HTM L文件一样必须事先生成才能访问,而是在第一次访问页面时生成。

页面输出缓存的原理

系统处理客户端的请求时,先看看有没有相应的页面输出缓存,如果有缓存且没有过期,就直接读取缓存并返回页面 HTML 代码给客户端;如果没有缓存,或缓存已经过期,则执行完整的页面解析过程,返回页面 HTML 代码给客户端,并将页面 HTML 代码保存到缓存中,这样下次再处理同样的请求时就直接从缓存读取并返回给客户端了。

这一原理和数据缓存非常类似。事实上,我们可以将页面输出缓存理解成一种特殊的数据缓存。

页面输出缓存和数据缓存的主要区别

数据格式差异
页面输出缓存,缓存的是整个解析后的页面 HTML 代码;而数据缓存,一般缓存的是页面中要调用的各个对象(比如各种 参数配置、所有站点信息、所有节点信息、所有权限数据等)。
存储位置差异
在我们系统中,页面输出缓存是以缓存文件方式保存在硬盘中的,类似于生成 HTML 功能的 HTML 文件;数据缓存一般是保存在内存中的,或者使用分布式缓存系统来保存。
数据量差异
页面输出缓存的数量非常非常多,假如我们有50万篇文章、10万个节点列表及分页,要为 PC/手机/PAD 三种设备缓存,则会有超过(50+10)X3=180万个页面输出缓存文件;而数据缓存的数量一般在几百个即可,相对于页面输出缓存来说,少得多。

功能特性

缓存策略

支持针对不同页面配置不同的缓存策略和缓存失效策略。

攻击防护

系统针对缓存穿透、缓存雪崩、缓存击穿等情况都做了防范。

系统能够防护各种潜在的缓存攻击行为,如穷举访问不存在的页面等。

手工清理缓存

支持手动清理站点首页缓存、所有节点缓存、所有内容缓存、全站页面缓存以及未发布内容的页面缓存。

支持在站点管理、节点管理、内容采编发中分别清理指定的站点、节点、内容的页面输出缓存。

自动按需清理缓存

在执行添加、修改、删除、审核通过、取消审核、发布、取消发布、移动等操作时,系统会自动清理对应页面的缓存文件,包括内容页、列表页和站点首页等。

当在节点A的模板中调用了跨上下级关系的节点 B 的内容时,系统会自动识别并维护节点间的关联关系。因此,在节点 B 进行添加、审核、发布等操作时,不仅会自动清理节点B的页面缓存,还会同步清理节点 A 的页面缓存,避免因遗漏清理导致节点 A 的列表页面无法及时更新。

当模板文件发生改变时自动清理调用了此模板的相关页面的页面输出缓存。

主动更新页面输出缓存

在清理缓存的时,系统会创建更新缓存的任务及其详细信息。让另外部署的缓存更新工具来访问后台服务器,从而及时将相应的页面创建好页面输出缓存,这样就与生成 HTML 的机制类似,从而极大提高整个系统的负载能力。此外,系统支持生成任务的优先级控制,以便在不同应用场景中灵活处理 HTML 生成的优先次序。系统还支持对任务及其详细信息进行排重处理,以减少对服务器资源的无效消耗。

数据库共享缓存

在多服务器负载均衡的部署环境中,各服务器可以通过数据库共享缓存数据。一旦其中一台服务器生成了缓存,其余服务器能够直接从数据库中获取共享的缓存,并将其转化为本地文件缓存,从而避免重新执行完整的页面解析过程。这种方法大大提高了整个系统的负载能力。

多服务器同步清理

在分布式部署环境中,支持通过消息队列让所有服务器同步清理页面输出缓存。

查看清理任务

支持在后台查看更新缓存任务及任务进度。

页面输出缓存相比生成静态 HTML 的优势

相比生成 HTML 方式,页面输出缓存机制具有如下优势:
  • 无需事先生成

    无需事先生成缓存,这样即使没有事先生成缓存,访问页面时也不会出现404错误(页面无法找到的提示);相比之下,生成静态 HTML 的主要缺点在于页面必须提前生成,否则访问时会报404错误。

  • 逻辑简单

    在清理缓存后,页面会立即显示最新的效果,这使得按需清理缓存的逻辑相对简单得多。而对于静态 HTML 页面,则需要重新生成文件才能看到最新的效果,因此不能删除原有文件后再重新生成 HTML 文件,只能替换原有文件,这导致按需生成 HTML 的逻辑变得非常复杂。

  • 无需等待

    各种操作后几乎可以无需要等待就可以看到效果。因为清理缓存文件的速度极快,所以后台各种操作后最多只需要几秒就完成了清理缓存操作,所以我们可以马上看到效果。而生成 HTML 操作则比较耗时(单机环境下每秒只能生成1~10个 HTML 页面),在一些需要生成大量 HTML 的使用场景时,往往要等上几分钟甚至几个小时才能看到最新的效果。

  • 不容易出现垃圾缓存文件

    在移动栏目、移动内容或关闭生成 HTML 等操作时,系统会自动清理相应的缓存。此外,由于缓存文件都有一个有效期,即使偶尔存在垃圾缓存文件,过了有效期后也无法再访问。如果确实发现垃圾缓存文件,只需清理一下全站缓存即可。而 HTML 生成机制则容易产生垃圾 HTML 文件,即使网站内的其他页面没有链接指向这些文件,外部链接(如搜索引擎收录的地址)仍可能指向这些垃圾 HTML 文件,导致它们仍然可访问,从而引发意想不到的问题。某些情况下,这些问题可能严重到引发政治性错误。这也是许多客户从其他系统转向我们系统的重要原因之一。

  • 清理垃圾缓存文件非常容易

    选择一个没有用户访问的时间段来清理全站缓存是比较简单的操作。然而,清理垃圾HTML文件却非常棘手。因为正常的 HTML 文件和垃圾 HTML 文件混杂在一起,为了确保网站的正常访问,无法直接删除所有的 HTML 文件。因此,无法执行“删除站点 HTML 文件”这类操作。唯一可行的方案是重新生成整个站点的所有 HTML 页面,然后手动筛选出某个时间点之前的 HTML 文件并进行删除。

  • 管理员查看时自动更新缓存

    通过特殊的设计,管理员在查看前台对应页面时,能够始终看到最新的内容,并且此操作还会自动刷新缓存。然而,由于生成 HTML 的机制特性,这种实时更新的功能无法实现。

  • 原生支持多屏优化

    通过为每种设备生成相应的页面输出缓存,实现了对不同设备的原生多屏优化支持,同时不会影响系统的性能和负载能力。

  • 支持前台访问权限控制

    通过将权限检查判断与页面解析/缓存读取相分离的设计思路,系统能够同时支持权限检查和页面输出缓存功能,从而确保即使在需要进行权限检查的情况下,网站的性能和负载能力也几乎不会受到影响。而静态 HTML 文件由于其固有的特性,无法实现访问权限控制。

  • 支持前台 IP 访问限定

    通过将 IP 访问限定的检查判断与页面解析/缓存读取相分离的设计思路,系统能够同时支持IP访问限制检查和页面输出缓存功能,从而确保在进行 IP 访问限制检查时,网站的性能和负载能力几乎不受影响。而静态 HTML 文件由于其固有特性,无法实现 IP 访问限制功能。

×

用户登录