Как использовать кеш для хранения констант из БД в Asp.Net WebForms на веб-ферме?

У меня есть опыт кеширования данных в приложениях Asp.Net Webforms.

У меня есть веб-ферма с четырьмя серверами.

У меня есть таблица с константами в MSSQL Server.

Я не хочу выбирать эти константы с каждым http-запросом от БД, но в идеале сохраняю значения в кеш и получаю эти значения из кеша.

Как я могу сделать это на веб-ферме? Каков наилучший способ сделать это?

2 ответа

Решение

Вы можете использовать HttpContext.Cache для хранения этих значений с длительным сроком действия или, если они действительно постоянны (т.е. они абсолютно НИКОГДА не меняются), тогда вы можете использовать static class с static readonly Свойства и заполните эти свойства один раз из базы данных.

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

Если данные действительно никогда не изменятся, вы также можете использовать HttpContext.Current.Application для хранения информации.

Согласно обзору здесь:

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

  • Переменные приложения являются общими переменными для всех пользователей веб-приложения.
  • Переменные приложения ведут себя как статические переменные, и они заменяют статические переменные, поскольку статические переменные не сохраняют состояния в веб-приложениях.
  • Только переменные значения должны быть сохранены в переменных приложения, и как только они не используются, они должны быть удалены явно.

Cache: Можно добиться значительного улучшения производительности приложений ASP.NET, кэшируя часто запрашиваемые объекты и данные в Application или же Cache классы. В то время как Cache Класс, безусловно, предлагает гораздо больше гибкости и контроля, он лишь предлагает незначительное преимущество с точки зрения увеличения пропускной способности по сравнению с Application класс для кеширования. Было бы очень трудно разработать схему тестирования, которая могла бы точно измерить потенциальные преимущества Cache встроенное в класс управление менее используемыми объектами посредством процесса очистки, в отличие от того факта, что Application не предлагает эту функцию. Разработчик должен принять решение в этом случае и должен основываться на потребностях и удобстве проекта и его моделях использования.

Другие вопросы по тегам