Sitecore HTML缓存和外部数据源

时间:2011-06-09 17:59:56

标签: caching sitecore

当你想要缓存一些依赖外部数据(搜索索引等)的子布局时,你会如何处理?

以下是示例:

  1. 更新内容后,点击 Sitecore中的“发布”。
  2. HTML缓存在自动清除之后 出版。
  3. 渲染Sublayout并将其放入缓存中 第一个请求,但搜索索引 尚未更新。
  4. 搜索索引已更新。
  5. 在下一次缓存清理之前,sublayout将显示缓存(过时)日期。
  6. 有没有简单的方法可以解决这个问题?

    到目前为止我只有一个想法 - 当索引更新结束时触发缓存清理,但由于很多原因它可能很复杂。

2 个答案:

答案 0 :(得分:3)

您可以缓存子布局,并按params进行更改,您可以在其中定义自定义参数。这些参数可以是来自Lucene的唯一字符串,例如它最后一次重建。

E.g。

<sc:sublayout ID="slNews" Path="NewsList.ascx" Cacheable="true" VaryByParm="true" runat="server" />

注意:Sitecore代码有拼写错误,而且“VaryByParm”不是“VaryByParam”

在C#中:

string lastIndexRebuild = GetLastRebuildTimeOfIndex().ToString();
slNews.Parameters = "lastIndexRebuild=" + lastIndexRebuild;

如果您可以某种方式定义方法以确定上次重建索引的时间,则可以将其用作参数,以根据索引新鲜度或过时时间定义自定义缓存实例。您甚至可以使用其他参数,例如数据源等。

答案 1 :(得分:1)

John West最近发布了相关的博客文章 -

Schedule Expiration for Output Cache Entries with the Sitecore ASP.NET CMS

您可以在子布局上设置缓存过期,在大多数情况下,当您的控件依赖外部数据源时,它似乎是最简单的解决方案。