Стратегия кеширования, выходной кэш или кэш данных или оба? - PullRequest
8 голосов
/ 18 февраля 2009

Я работаю над проектом ASP.NET MVC и подошел к тому моменту, когда я хочу начать рассматривать мою стратегию кэширования. Я попытался оставить свой фреймворк максимально открытым для использования в кэшировании.

Из того, что я слышал во время подкаста Скотта Хансельмана, StackOverflow.com использует кэширование вывода страницы, архивирует содержимое и помещает его в оперативную память. Это звучит так, как будто это было бы замечательно для кэша всего пользователя, но для чего-то вроде персонализированных страниц вам придется кэшировать версию для каждого пользователя, и это может очень быстро выйти из-под контроля.

Итак, для стратегии кеширования. Что следует использовать: выходное кэширование, кэширование данных или комбинированное? Мои первые мысли - и то, и другое, но что касается зависимостей кеша, может показаться, что они могут быть немного сложными.

Ответы [ 2 ]

8 голосов
/ 18 февраля 2009

Мы занимаемся кэшированием API и вывода в крупном масштабе (3 миллиона посещений в день) на веб-сайте (новостной портал). Сайт в основном используется анонимными пользователями, но у нас есть аутентифицированные пользователи, и мы кэшируем полный сайт только для них, из-за некоторых персонализированных частей сайта, и я должен признать, что у нас не было абсолютно никаких проблем с нехваткой памяти.

Итак, мой совет - кешировать все, что можно, в кеше API, чтобы перестройка кеша вывода была еще быстрее.

Конечно, обратите особое внимание на значения коэффициента кэша в счетчиках производительности. Вы должны увидеть числа> 95% кэшированных хитов.

Еще одна вещь, на которую следует обратить внимание - это недействительность кэша, это большая проблема, если у вас много связанного контента. Например, вы кэшируете музыкальные материалы, и информация об одном альбоме или песне может отображаться и кэшироваться на нескольких сотнях страниц. Если что-то изменится в этой песне, вы должны аннулировать все эти страницы, что может быть проблематично.

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

7 голосов
/ 18 февраля 2009

Будьте осторожны с чрезмерно агрессивным кэшированием. Хотя кэширование - это инструмент, помогающий повысить производительность, при неправильном использовании он может фактически ухудшить производительность.

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

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

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

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

...