Как я могу реализовать стратегию кэширования в моем Asp.net Mvc с репозиторием linq2sql?

StackOverflow https://stackoverflow.com/questions/199138

Вопрос

Я не знаю, следует ли мне использовать кэширование httpcontext или блок приложения кэширования Enterprise Library. Кроме того, каков наилучший шаблон для стратегии кэширования при удалении или обновлении объекта, являющегося частью кэшированного списка?

Должен ли я удалить весь список из кэша или удалить только элемент из кэшированного списка? Если я обновлю его, я удалю список из кэша или обновлю сущность в нем.

Это было полезно?

Решение

Существует несколько подходов к реализации кэширования, httpcontext - самый простой, но не обязательно худший. Посмотрите на memcached или MS Velocity , оба из которых могут использоваться в качестве бэкэнда для кэша ASP.NET. Особенно memcached имеет репутацию очень хорошей работы.

Что касается политики кэширования: вам нужно решить, что лучше для вас. Я бы лично удалил полный список из кэша при обновлении / удалении, а не пытался выяснить, есть ли объект в списке, так как он требует нетривиальное количество времени, и вам необходимо принимать во внимание проблемы параллелизма (блокировка списка, поскольку кто-то может обновить / удалить другую сущность). Иногда имеет смысл обновить сущность на месте (если у вас есть полный объект со всеми необходимыми данными), иногда это пустая трата времени, потому что из-за какого-то изменения состояния сущность должна переместиться куда-то еще (например, когда вы сортируете по LastChangedDate и т. Д.)

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

Другие советы

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

На вашем месте я бы использовал шаблон Repository для поддержки своего кэша, он хорошо работает для наборов данных базы данных и должен одинаково хорошо работать для вашего кэша. Если вы не знакомы с шаблоном хранилища, ознакомьтесь с этим сообщением из Стивен Вальтер. . Однако я не согласен с предыдущим ответом: вынимаю только те элементы, которые вам нужны для модификации, а остальное оставляю нетронутыми. Это позволит вам независимо от всего списка удалять элементы из кэша независимо от всего списка.

просто используйте [OutputCache (Duration = 10, VaryByParam = " нет ")] на каждое действие или даже контроллер, который вы хотите кэшировать.

от http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top