我们正在AEM 6.1中的一个网站上工作,该网站包含新闻和活动内容,其中大多数网页都有基于动态标记的近期和相关新闻/事件的信息。我们正在使用调度员。请提供一些缓存技术,这些技术可以在除调度程序之外的应用程序级别实现。感谢。
答案 0 :(得分:0)
在调度程序上实现缓存的目的是允许较少的点击量在您的应用服务器上,并尽可能地从Web服务器提供服务。简而言之,可以改善应用服务器的响应时间。但在某些情况下,如果结果经常在应用服务器上发生变化,我们就无法在Web服务器上缓存过多。
在应用服务器上,我们可以实施以下解决方案,以便在调度员到位的情况下快速获得结果。
确保您提取新闻项目的内容层次结构的文章数量尽可能少。根据以下结构划分层次结构。年份>>月>>日>>小时(如果内容流量较少,则可以忽略)>>新闻。
使用此结构后,编写基于路径的查询,这样您就不必遍历整个内容层次结构。
CQ中有一个瞬态节点的概念,对于在CQ中创建的每个新闻项,用新创建的项更新瞬态节点。您不必遍历内容结构的最新消息的手段仅指引用新创建的新闻项的瞬态节点。
您还可以编写一个在后台执行的cron作业,并负责整理视图,即最近的新闻。
答案 1 :(得分:0)
为了补充Rupesh的答案我会说绝对尽可能多地使用调度程序缓存,并且在AEM中使用本地缓存策略尝试使用guava缓存它是一个非常好且易于使用的工具还有很多关于如何设置和使用它以满足您的特定需求的信息。希望它有所帮助。
答案 2 :(得分:0)
我建议如下:
的/ tmp /最近
最近总是在数组的末尾。您的代码需要将其限制为您想要拥有的最大值。 让我们假设您想要更改最后5个并更改第6页,然后您只需弹出并推送(new_page_path)
这可以每天运行一次,也可以根据您的要求以您认为最佳的频率运行。
如果您需要即时更新,则可以在更改/删除页面时另外编写监听器并更新最近列表。在这种情况下,我建议将处理更新最近列表的代码放入服务中,并在调度程序和侦听器中使用该服务。
监听器和调度程序需要在作者和发布者以及发布者触发器调度程序缓存失效后运行/ tmp / recent。
为了呈现最近的列表而不必使整个页面无效,我建议您使用SSI,这意味着在页面中有一个组件将SSI包含到/tmp/recent.news.html或/tmp/recent.events.html取决于您是否要呈现最近的新闻或事件。 给节点/ tmp / recent提供resourceType来处理" news"和"事件"选择器并实现该resourceType以呈现内容。
此外,我建议使用包含使用SSI包含的内容的专用组件。假设您的页面有2个标签,ns / tag1和ns / tag2,那么您可以像这样执行SSI包含:
在/ apps / cq / tagging / components / tag(sling:resourceSuperType = / libs / cq / tagging / components / tag)下编写一个组件,它将为" related_news"和" related_events"选择器并列出所有相关页面。
此方法的优点是您可以共享每个标记的相关页面,每当更改/删除标记时,缓存都会自动失效。
在这两种情况下(最近和相关)配置调度程序来缓存输出。