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

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

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

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

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

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


person Jenan    schedule 31.03.2016    source источник


Ответы (2)


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

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

person Peter B    schedule 31.03.2016

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

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

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

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

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

person denpone    schedule 31.03.2016
comment
Добро пожаловать в Stack Overflow! Хотя ссылка может отвечать на вопрос, ссылки меняются, поэтому Stack Overflow предпочитает не зависеть от них. Было бы лучше включить сюда основные части ответа и предоставить ссылку для справки. - person Dave Schweisguth; 31.03.2016