кэширование общих данных поиска - стратегии

Рассмотрение реализации кэширования некоторых общих данных поиска в веб-приложении asp.net.

Раньше я создавал синглтон, который создает кучу хэш-таблиц с общедоступными средствами доступа. Это очень хорошо работает с данными только для чтения, которые никогда не меняются.

Я немного изучил System.Web.Caching, но, похоже, он не предлагает никаких преимуществ по сравнению с одноэлементным подходом. Мы не используем SQLServer, поэтому не сможем воспользоваться преимуществом SQLCacheDependency в редких случаях, когда данные могут измениться.

У кого-нибудь есть опыт работы с любой из этих альтернатив? Или есть предложение получше?


person chris    schedule 14.01.2009    source источник


Ответы (3)


Одним из преимуществ System.Web.Caching является то, что память хранится в пуле приложений. Это удобно, потому что очень легко установить ограничения памяти / обработки по пулам приложений.

Я столкнулся с этим, когда мы проводили стресс-тестирование нашего приложения (каждая пользовательская задача требует дорогостоящих вычислений). По мере того, как мы добавляли все больше и больше пользователей, кеш занимал всю доступную память. Как только мы установили ограничение памяти для пула приложений, все само собой позаботилось. В кэше есть алгоритмы LRU для управления памятью.

Я не знаю, зависят ли данные в вашем кеше от нагрузки, но если да, то это удобное преимущество.

person jwmiller5    schedule 14.01.2009
comment
Память, используемая одноэлементными объектами, также хранится в пуле приложений. - person Seth Reno; 21.04.2010

Я не могу говорить о преимуществах System.Web.Caching, поскольку, как и вы, я обычно реализовывал одноэлементные экземпляры структуры данных таблицы поиска. Класс singleton также предоставляет метод InvalidateCache () для обработки редких случаев, когда данные могут измениться.

Если вы создаете библиотеку бизнес-объектов для использования как в asp.net, так и, например, в winforms, вы можете отказаться от использования System.Web.Caching.

Инфраструктура бизнес-объектов, которую я использую, предоставляет базовый класс для таблиц поиска под названием NameValueListBase ‹TKey, TValue›. Этот универсальный базовый класс предоставляет строго типизированные вспомогательные методы. Вы можете разработать аналогичный базовый класс и предоставить свои собственные вспомогательные методы, а не просто предоставлять экземпляр System.Collections.Generic.Dictionary.

Платформа бизнес-объектов, о которой я говорю, называется CSLA.Net и подробно описывается в Expert C # 2008 Business Objects. Также существует версия книги для VB.Net.

person Ken Browning    schedule 14.01.2009

У меня есть опыт работы с обоими. Я предпочитаю шаблон singleton по следующим причинам:

  1. Не привязан к asp.net
  2. Это позволяет вам использовать поиск на уровне бизнеса для проверки или чего-то еще.
  3. Реорганизовать рефакторинг будет проще, если поиск станет более сложным и вы решите не кэшировать его.
person Seth Reno    schedule 15.01.2009