HTML-кэш Sitecore и внешние источники данных - PullRequest
1 голос
/ 09 июня 2011

Как бы вы справились с ситуацией, когда вы хотите кэшировать некоторый подслой, который опирается на внешние данные (поисковый индекс и т. Д.)?

Вот пример:

  1. После обновления контента вы нажимаете «Опубликовать» в Sitecore.
  2. Кэш HTML автоматически очищается после публикации.
  3. Подслой отображается и помещается в кэш по первому запросу, но индекс поиска еще не обновлен.
  4. Индекс поиска обновляется.
  5. До следующей очистки кэша подуровень будет отображать кэшированную (устаревшую) дату.

Существуют ли простые способы исправить этопроблема?

Пока у меня есть только одна идея - запустить очистку кэша, когда обновление индекса завершено, но это может быть сложно по многим причинам.

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Вы можете кэшировать подслой и варьироваться по параметрам, где вы определяете пользовательские параметры. Эти параметры могут быть уникальной строкой из Lucene, например, в последний раз, когда она была перестроена.

* 1003 Е.Г. *

<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 голос
/ 10 сентября 2011

Джон Уэст недавно опубликовал соответствующую запись в блоге -

Расписание срока действия для записей в выходном кэше с помощью Sitecore ASP.NET CMS

Вы можете установить срок действия кэша для подуровнейв большинстве случаев это кажется самым простым решением, когда ваш элемент управления использует внешний источник данных.

...