Вопрос

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

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

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

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

Решение

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

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

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

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

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

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

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

Удачи вам,

--
Мэтт.

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

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

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

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

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

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 .Каслвиндзор/

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

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

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