2008-09-18 4 views
7

Я рассматриваю использование перехватчиков Castle Windsor для кэширования данных, помогающих масштабировать сайт asp.net.Виндзорские перехватчики AOP и кэширование

У кого-нибудь есть мысли/опыт с этим?

Незначительное разъяснение: Мое намерение заключалось в том, чтобы использовать Windsor для перехвата «дорогих» вызовов и делегирования в MemCacheD или Velocity (или другой распределенный кеш) для самого кэширования.

ответ

2

Я использую кеширующие декораторы (не перехватчики) с Виндзором, и они отлично работают.

Перехватчики также подходят для этого, см., Например, this.

+0

Спасибо, Mausch. Я тоже пошел по пути декоратора. – 2008-10-31 07:45:22

+4

Кэширование декораторов? Как это отличается от перехватчиков? с точки зрения его декларации, используя свободную регистрацию? Примеры пожалуйста. – IanT8 2011-07-04 23:17:12

-2

Windsor отлично, но зачем использовать это для кеширования, если у вас есть несколько встроенных способов кэширования данных. Windsor имеет свои основания в других областях, которые не обязательно кэшируются. От объекта кеша до сеанса до файлов cookie. Существует много способов кэширования. Что еще более важно в больших приложениях, вам необходимо распределенное кэширование. MS работает над этим продуктом, и есть пара хороших поставщиков, которые имеют продукты на рынке.

+0

Спасибо, Томас. Мое намерение состояло в том, чтобы использовать Windsor для перехвата «дорогих» вызовов и делегирования MemCacheD или Velocity для самого кэширования. – 2008-09-18 17:04:09

0

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

1

Как вы осуществляете доступ к данным? Если вы используете NHibernate, я бы предложил кешировать здесь. NHibernate поставляется с кеш-стратегиями для встроенного кеша .NET, memcached (через NMemcachD) и Velocity. Я использовал memcached экстенсивно для приложений уровня предприятия и не имел проблемы с ним.

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

+0

спасибо, chris К сожалению, только небольшая часть данных поступает от NHibernate. Большинство данных поступает от Sharepoint, и существует потребность в агрегировании метаданных в нескольких списках (не спрашивайте :-)) – 2008-09-18 17:33:50

4

Эй, мы использовали Захватные Виндзорские перехватчики, основанные на этой статье: http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx, а также упомянутый выше.

Я нашел все это довольно просто, и это очень элегантный способ сделать АОП. Однако ....

Осторожно с производительностью, хотя. Использование перехвата создает динамический прокси-сервер, который, безусловно, замедлит работу. Основываясь на наших тестах с использованием вычислительной фермы 500 узлов, мы увидели снижение производительности примерно на 30% за счет использования перехвата в Виндзоре, это было вне того, что мы делали внутри перехвата (по сути, вызовы методов ведения журнала и параметры, переданные нашим методам) , и просто удаление перехвата ускорило все приложение совсем немного.

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

Успехов,

-
Мэтт.

0

Я создал проект с открытым исходным кодом с именем cachew.castlewindsor с кэширующим перехватчиком. Это универсальное решение для кэширования.

Вот простой пример использования:

var container = new WindsorContainer(); container.Register(Component.For<CacheInterceptor>() .Instance(new CacheInterceptor(new Cache(TimeoutStyle.RenewTimoutOnQuery, TimeSpan.FromSeconds(3))))); container.Register(Component.For<IServer>().ImplementedBy<Server>().Interceptors<CacheInterceptor>());

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

Проект доступен на NuGet: http://www.nuget.org/packages/Cachew.CastleWindsor/

И исходный код доступен здесь: https://github.com/kobbikobb/Cachew