Sitecore 7:"Clear on Index Update" 不工作?

Sitecore 7: "Clear on Index Update" not working?

有关功能的描述,请参阅 this post

我的 HTML 缓存已启用,并且我已为我的渲染之一打开 "Clear on Index Update"。

但是,我的渲染条目在缓存中没有标记任何特殊标记 - 我在使用渲染之前和之后验证了缓存内容。当然,这会导致 Sitecore.ContentSearch.Maintenance.IndexDependentHtmlCacheManager 中的 Clear() 方法无法拾取它,从而使该功能无用。

我使用的是 Sitecore 7.2 - 这是已知错误吗?

您可以覆盖 GenerateCacheKey 处理器(或在该处理器之后添加您自己的处理器)并更新密钥以包含 _#index

以下代码适用于 MVC。正如@jammykam 所说,在 WebForms 中,密钥被添加到 cacheKey OOTB。

public class GenerateCustomCacheKey : GenerateCacheKey
{
    protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args)
    {
        Item renderingItem = rendering.RenderingItem.InnerItem;

        var key = base.GenerateKey(rendering, args);

        if (renderingItem["ClearOnIndexUpdate"].ToBool())
            key += "_#index";

        return key;
    }
}
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <mvc.renderRendering>
        <processor 
          type="My.Assembly.Namespace.GenerateCustomCacheKey, My.Assembly" 
          patch:instead="*[@type='Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey, Sitecore.Mvc']" />
      </mvc.renderRendering>
    </pipelines>
  </sitecore>
</configuration>

好的,事实证明此功能目前在 MVC 上存在漏洞,至少截至 2015 年 3 月 16 日:

http://www.tarasalenin.com/caching-sitecore-mvc-renderings/

就是这样。有变通办法,但与此同时我以不同的方式解决了我的问题。发布这个以防其他人碰巧遇到同样的问题。