Кэш динамического вывода - PullRequest
0 голосов
/ 08 марта 2011

Интересно, есть ли какие-нибудь механизмы кеширования или у кого-то есть хорошее решение, способное удовлетворить эти требования:

  • Он должен хранить простые HTML-фрагменты страницы, такие как стандартный кэш вывода, в asp.net
  • HTML может содержать динамическое содержимое из базы данных
  • Когда объект обновляется в базе данных, весь кэшированный фрагмент HTML, содержащий этот конкретный объект, должен быть уничтожен и повторно кэширован в следующий раз, когда он будетбыть запрошенным

Существует отдельный инструмент администратора для обработки всех данных в базе данных, поэтому я могу легко сохранять идентификаторы в кэшируемой таблице, когда объект недействителен.Я также могу сделать запрос к странице, которая уничтожит все кэшированные фрагменты HTML для этого объекта.

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

Ответы [ 2 ]

0 голосов
/ 08 марта 2011

У вас есть две проблемы для рассмотрения:

Номер 1: аннулирование кэша.Эту проблему можно решить с помощью зависимостей кэша (см. http://msdn.microsoft.com/en-us/library/system.web.caching.cachedependency.aspx), которые позволят сделать объекты недействительными и повторно записанными при изменении данных (автоматически!).

Номер 2: Кэш-память.Для этого просто используйте стандартный API-интерфейс кэширования ASP.Net с помощью HttpContext.Current.Cache (или подходящей абстракции).Это поддерживает систему зависимостей, как упомянуто выше.

Реализация кэша ASP.Net является подключаемой, поэтому вы можете изменить механизм хранения, например, в памяти, файлах, базах данных SQL, Memcached (через Enyim) или Microsoft Velocity.Каждое хранилище кеша отличается надежностью, которую вы можете выбирать в зависимости от ваших требований.

0 голосов
/ 08 марта 2011

Я предполагаю, что это все на странице ASP .Net. Я думаю, что ваша ситуация достаточно проста, чтобы вы могли написать этот механизм кэширования самостоятельно:

  • Сделайте ваш SQL-запрос как обычно
  • Используйте результаты для вывода вашей страницы aspx
  • Сохранять результаты в статической переменной или в статическом классе "Cache", это должно сохраняться от запроса к запросу

Будущие запросы будут использовать ваши сохраненные результаты, если они не будут признаны недействительными, как вы упомянули. (По моему опыту, истечение времени в 1 минуту может работать хорошо).

Если вы хотите усложнить работу и сохранить кеш даже после перезапуска IIS: вы можете легко использовать XmlSerializer и записывать результаты в файл вместо статических переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...