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

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

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

Ответы [ 3 ]

6 голосов
/ 14 октября 2008

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

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

2 голосов
/ 14 октября 2008

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

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

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

0 голосов
/ 29 июня 2012

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

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

...