当你想要缓存一些依赖外部数据(搜索索引等)的子布局时,你会如何处理?
以下是示例:
有没有简单的方法可以解决这个问题?
到目前为止我只有一个想法 - 当索引更新结束时触发缓存清理,但由于很多原因它可能很复杂。
答案 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
您可以在子布局上设置缓存过期,在大多数情况下,当您的控件依赖外部数据源时,它似乎是最简单的解决方案。