Это четырнадцатая статья из серии материалов о выходящих VS 2010 и .NET 4. Сегодняшняя статья поведает нам об улучшениях механизма кэширования, которые произвели в ASP.NET 4. Нововведения могут быть использованы во всех ASP.NET 4 приложениях, включая приложения, разработанные на ASP.NET Web Forms и ASP.NET MVC.
ASP.NET 1.0 представила концепцию кэширования результатов, которая позволяла разработчикам захватывать и сохранять сгенерированные страницы, элементы управления, контроллеры и HTTP ответы в памяти кэша. Во время всех дальнейших веб-запросов, ASP.NET может доставлять содержимое быстрее, возвращая готовые данные с кэша, не запуская страницу или контроллер для генерирования результата. Это может значительно увеличить производительность ваших приложений особенно в случаях, когда ваши данные хранятся в базе данных (после кэширования, вам больше не нужно будет выполнять запросы в базу данных при каждом обращении к странице).
Механизм кэширования в ASP.NET достаточно гибок для хранения разнородных данных, в зависимости от GET/POST параметров, передаваемых странице или контроллеру, например: Browse.aspx?category=Beverages и Browse.aspx?category=Meat — разные кэш-данные. Он также позволяет кэшировать разные версии результатов, основываясь на типе браузера и языковых настройках пользователя. Это позволяет вам кэшировать мобильную версию страницы отдельно от версии для настольного браузера, как и вариация данных в кэше, основанных на предпочтениях пользователя читать страницу на английском или французском. Вы можете настроить ASP.NET для кэширования отдельных частей на определенный период времени. Например, на 1 минуту, после которой запрос перегенерирует результата и снова его закэширует. Вы также можете заставить ASP.NET динамически аннулировать часть кэша по внешнему событию, например, если данные, на которых основывается кэш, изменились в базе данных.
До ASP.NET 4 существовало одно ограничение в механизме кэширования, которое заключалось в том, что кэш не мог сам себя расширить, и закэшированное содержимое всегда должно было хранится в памяти.
ASP.NET 4 добавляет расширяемость механизма кэширования, который позволяет разработчикам настраивать один и более собственных кэш-провайдеров. Кэш-провайдеры могут использовать различные механизмы хранения данных. Это позволяет создавать кэш-провайдеры, которые хранят данные в кэше, используя любой механизм хранения, включая локальные или удаленные диски, базы данных, облачные хранилища и распространенные кэш-движки (memcached или velocity).
Вы можете создать свой кэш-провайдер, добавив класс, который наследуется от нового класса System.Web.Caching.OutputCacheProvider, который появился в ASP.NET 4. В объявленном классе нужно перегрузить 4 публичных метода, которые отвечают за реализацию добавление/удаление/изменение/возврата закэшерованного содержимого (для нахождения любого кэш-элемента используется ключ). Вы можете настроить ASP.NET 4 для использования собственных кэш-провайдера, зарегистрировав его в web.config в новой <outputCache> подсекции <providers>:
Выше, я добавил новый кэш-провайдер, который назвал «SampleCache», он реализован, используя класс «ScottOutputCache» в сборке OutputCacheSample.dll. Я также попросил ASP.NET использовать «SampleCache», как механизм кэширования по умолчанию, указав атрибут «defaultProvider» в элементе <outputCache>:
А сейчас, когда я добавлю директиву OutputCache в шапку .aspx файла, содержимое страницы будет закэшированно и сохранено при помощи моего провайдера ScottOutputCache:
Более того, если я добавлю атрибут [OutputCache] любому методу действия в контроллере ASP.NET MVC, содержимое будет также закэшировано и сохранено при помощи провайдера ScottOutputCache:
До этого я настроил ASP.NET так, чтобы он по умолчанию всегда использовал мой провайдер «SampleCache», где бы ни использовалось кэширование в приложении.
В дополнение, разработчики могут настроить динамический выбор кэш-провайдера для каждого запроса. Это удобно для сценариев, где вы хотите иметь более богатый набор кэш-семантики. Например, вы хотите закэшировать на сайте страницу «Home» или «Top 10», где используется встроенный в ASP.NET in-memory провайдер, который супер-быстрый за счет хранения данных в оперативной памяти, а менее запрашевыемые страницы закэшировать на диск.
Вы можете динамически определить, какой кэш-провайдер использовать при каждом запросе, перегрузив метод GetOutputCacheProviderName() в файле Global.asax. Ниже, я указывают для «Home.aspx» использовать встроенный in-memory ASP.NET кэш-провайдер, в независимости от установленного кэш-провайдера в web.config файле:
Данная возможность позволяет переключаться между провайдерами в зависимости от нужды и позволяет реализовывать мощные сценарии.
Мы предоставим примеры, которые демонстрируют, как реализовать кэш-провайдер, которые использует хранение закэшированных данных в файловой системе. Также предоставим примеры, которые показывают, как интегрировать кэширование с новым Windows Server AppFabric Caching Service, известным как «Velocity». Сервис кэширования AppFabric будет бесплатной, полностью поддерживаемой кэш-системой от Microsoft. В ASP.NET 4 будет легко использовать механизм расширения для memcached — популярной open source кэш-системы.
Вы можете ознакомиться с принципами создания провайдеров, просмотрев видео Стефана Шакоу c PDC — ASP.NET 4 Core Runtime. А также ознакомится с AppFabric Cache сервисом наPDC 2009.
Добавление возможности расширять механизм кэширования в ASP.NET 4, позволяет разработчикам осуществлять более агрессивные и разумные стратегии кэшерования для веб-сайтов и приложений. Это может значительно улучшить производительность и отклик приложения, и уменьшить количество требуемых ресурсов для сервера.
Механизм кэширования сегодня
ASP.NET 1.0 представила концепцию кэширования результатов, которая позволяла разработчикам захватывать и сохранять сгенерированные страницы, элементы управления, контроллеры и HTTP ответы в памяти кэша. Во время всех дальнейших веб-запросов, ASP.NET может доставлять содержимое быстрее, возвращая готовые данные с кэша, не запуская страницу или контроллер для генерирования результата. Это может значительно увеличить производительность ваших приложений особенно в случаях, когда ваши данные хранятся в базе данных (после кэширования, вам больше не нужно будет выполнять запросы в базу данных при каждом обращении к странице).
Механизм кэширования в ASP.NET достаточно гибок для хранения разнородных данных, в зависимости от GET/POST параметров, передаваемых странице или контроллеру, например: Browse.aspx?category=Beverages и Browse.aspx?category=Meat — разные кэш-данные. Он также позволяет кэшировать разные версии результатов, основываясь на типе браузера и языковых настройках пользователя. Это позволяет вам кэшировать мобильную версию страницы отдельно от версии для настольного браузера, как и вариация данных в кэше, основанных на предпочтениях пользователя читать страницу на английском или французском. Вы можете настроить ASP.NET для кэширования отдельных частей на определенный период времени. Например, на 1 минуту, после которой запрос перегенерирует результата и снова его закэширует. Вы также можете заставить ASP.NET динамически аннулировать часть кэша по внешнему событию, например, если данные, на которых основывается кэш, изменились в базе данных.
До ASP.NET 4 существовало одно ограничение в механизме кэширования, которое заключалось в том, что кэш не мог сам себя расширить, и закэшированное содержимое всегда должно было хранится в памяти.
Расширяемость механизма кэширования в ASP.NET 4.
ASP.NET 4 добавляет расширяемость механизма кэширования, который позволяет разработчикам настраивать один и более собственных кэш-провайдеров. Кэш-провайдеры могут использовать различные механизмы хранения данных. Это позволяет создавать кэш-провайдеры, которые хранят данные в кэше, используя любой механизм хранения, включая локальные или удаленные диски, базы данных, облачные хранилища и распространенные кэш-движки (memcached или velocity).
Вы можете создать свой кэш-провайдер, добавив класс, который наследуется от нового класса System.Web.Caching.OutputCacheProvider, который появился в ASP.NET 4. В объявленном классе нужно перегрузить 4 публичных метода, которые отвечают за реализацию добавление/удаление/изменение/возврата закэшерованного содержимого (для нахождения любого кэш-элемента используется ключ). Вы можете настроить ASP.NET 4 для использования собственных кэш-провайдера, зарегистрировав его в web.config в новой <outputCache> подсекции <providers>:
Выше, я добавил новый кэш-провайдер, который назвал «SampleCache», он реализован, используя класс «ScottOutputCache» в сборке OutputCacheSample.dll. Я также попросил ASP.NET использовать «SampleCache», как механизм кэширования по умолчанию, указав атрибут «defaultProvider» в элементе <outputCache>:
А сейчас, когда я добавлю директиву OutputCache в шапку .aspx файла, содержимое страницы будет закэшированно и сохранено при помощи моего провайдера ScottOutputCache:
Более того, если я добавлю атрибут [OutputCache] любому методу действия в контроллере ASP.NET MVC, содержимое будет также закэшировано и сохранено при помощи провайдера ScottOutputCache:
Какой кэш-провайдер будет использован
До этого я настроил ASP.NET так, чтобы он по умолчанию всегда использовал мой провайдер «SampleCache», где бы ни использовалось кэширование в приложении.
В дополнение, разработчики могут настроить динамический выбор кэш-провайдера для каждого запроса. Это удобно для сценариев, где вы хотите иметь более богатый набор кэш-семантики. Например, вы хотите закэшировать на сайте страницу «Home» или «Top 10», где используется встроенный в ASP.NET in-memory провайдер, который супер-быстрый за счет хранения данных в оперативной памяти, а менее запрашевыемые страницы закэшировать на диск.
Вы можете динамически определить, какой кэш-провайдер использовать при каждом запросе, перегрузив метод GetOutputCacheProviderName() в файле Global.asax. Ниже, я указывают для «Home.aspx» использовать встроенный in-memory ASP.NET кэш-провайдер, в независимости от установленного кэш-провайдера в web.config файле:
Данная возможность позволяет переключаться между провайдерами в зависимости от нужды и позволяет реализовывать мощные сценарии.
Распространенные кэш-провайдеры
Мы предоставим примеры, которые демонстрируют, как реализовать кэш-провайдер, которые использует хранение закэшированных данных в файловой системе. Также предоставим примеры, которые показывают, как интегрировать кэширование с новым Windows Server AppFabric Caching Service, известным как «Velocity». Сервис кэширования AppFabric будет бесплатной, полностью поддерживаемой кэш-системой от Microsoft. В ASP.NET 4 будет легко использовать механизм расширения для memcached — популярной open source кэш-системы.
Вы можете ознакомиться с принципами создания провайдеров, просмотрев видео Стефана Шакоу c PDC — ASP.NET 4 Core Runtime. А также ознакомится с AppFabric Cache сервисом наPDC 2009.
Итоги
Добавление возможности расширять механизм кэширования в ASP.NET 4, позволяет разработчикам осуществлять более агрессивные и разумные стратегии кэшерования для веб-сайтов и приложений. Это может значительно улучшить производительность и отклик приложения, и уменьшить количество требуемых ресурсов для сервера.