页面输出缓存的原理
系统处理客户端的请求时,先看看有没有相应的页面输出缓存,如果有缓存且没有过期,就直接读取缓存并返回页面 HTML 代码给客户端;如果没有缓存,或缓存已经过期,则执行完整的页面解析过程,返回页面 HTML 代码给客户端,并将页面 HTML 代码保存到缓存中,这样下次再处理同样的请求时就直接从缓存读取并返回给客户端了。
这一原理和数据缓存非常类似。事实上,我们可以将页面输出缓存理解成一种特殊的数据缓存。
页面输出缓存和数据缓存的主要区别
- 数据格式差异
- 页面输出缓存,缓存的是整个解析后的页面 HTML 代码;而数据缓存,一般缓存的是页面中要调用的各个对象(比如各种 参数配置、所有站点信息、所有节点信息、所有权限数据等)。
- 存储位置差异
- 在我们系统中,页面输出缓存是以缓存文件方式保存在硬盘中的,类似于生成 HTML 功能的 HTML 文件;数据缓存一般是保存在内存中的,或者使用分布式缓存系统来保存。
- 数据量差异
- 页面输出缓存的数量非常非常多,假如我们有50万篇文章、10万个节点列表及分页,要为 PC/手机/PAD 三种设备缓存,则会有超过(50+10)X3=180万个页面输出缓存文件;而数据缓存的数量一般在几百个即可,相对于页面输出缓存来说,少得多。
功能特性
- 缓存策略
-
支持针对不同页面配置不同的缓存策略和缓存失效策略。
- 攻击防护
-
系统针对缓存穿透、缓存雪崩、缓存击穿等情况都做了防范。
系统能够防护各种潜在的缓存攻击行为,如穷举访问不存在的页面等。
- 手工清理缓存
-
支持手动清理站点首页缓存、所有节点缓存、所有内容缓存、全站页面缓存以及未发布内容的页面缓存。
支持在站点管理、节点管理、内容采编发中分别清理指定的站点、节点、内容的页面输出缓存。
- 自动按需清理缓存
-
在执行添加、修改、删除、审核通过、取消审核、发布、取消发布、移动等操作时,系统会自动清理对应页面的缓存文件,包括内容页、列表页和站点首页等。
当在节点A的模板中调用了跨上下级关系的节点 B 的内容时,系统会自动识别并维护节点间的关联关系。因此,在节点 B 进行添加、审核、发布等操作时,不仅会自动清理节点B的页面缓存,还会同步清理节点 A 的页面缓存,避免因遗漏清理导致节点 A 的列表页面无法及时更新。
当模板文件发生改变时自动清理调用了此模板的相关页面的页面输出缓存。
- 主动更新页面输出缓存
-
在清理缓存的时,系统会创建更新缓存的任务及其详细信息。让另外部署的缓存更新工具来访问后台服务器,从而及时将相应的页面创建好页面输出缓存,这样就与生成 HTML 的机制类似,从而极大提高整个系统的负载能力。此外,系统支持生成任务的优先级控制,以便在不同应用场景中灵活处理 HTML 生成的优先次序。系统还支持对任务及其详细信息进行排重处理,以减少对服务器资源的无效消耗。
- 数据库共享缓存
-
在多服务器负载均衡的部署环境中,各服务器可以通过数据库共享缓存数据。一旦其中一台服务器生成了缓存,其余服务器能够直接从数据库中获取共享的缓存,并将其转化为本地文件缓存,从而避免重新执行完整的页面解析过程。这种方法大大提高了整个系统的负载能力。
- 多服务器同步清理
-
在分布式部署环境中,支持通过消息队列让所有服务器同步清理页面输出缓存。
- 查看清理任务
-
支持在后台查看更新缓存任务及任务进度。
用户登录
还没有账号?
立即注册