Как использовать кеш для хранения констант из БД в 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 не предлагает эту функцию. Разработчик должен принять решение в этом случае и должен основываться на потребностях и удобстве проекта и его моделях использования.