Подтвердить что ты не робот

Система кэширования System.Web.Caching и Enterprise Library

Для .NET-компонента, который будет использоваться как в веб-приложениях, так и в богатых клиентских приложениях, похоже, существуют два очевидных варианта кеширования: System.Web.Caching или Ent. Lib. Кэширующий блок.

  • Что вы используете?
  • Почему?

System.Web.Caching

Безопасно ли это использовать за пределами веб-приложений? Я видел смешанную информацию, но я думаю, что ответ может быть, например, не-действительно.

Я не ожидаю использовать один из его основных моментов, SqlCacheDependency, но добавление CacheItemUpdateCallback в .NET 3.5 выглядит как действительно хорошая вещь.

Блок приложений кэширования корпоративной библиотеки

  • другие блоки уже используются, поэтому зависимость уже существует.
  • сохранение кэша не требуется; восстановление кэша при перезапуске ОК

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

Memcached для Win32 + . NET-клиент

Каковы плюсы и минусы, когда вам не нужен распределенный кеш?

4b9b3361

Ответ 1

Это те элементы, которые я рассматриваю для темы кэширования:

MemCached Win32 Скорость .net Cache Кэширование приложений корпоративной библиотеки

MemCached Win32: До недавнего времени я использовал MemCached Win32. Это сродни веб-ферме (многие серверы обслуживают один и тот же контент для высокой доступности), но это ферма кеша. Это означает, что вы можете установить его локально на своем веб-сервере изначально, если у вас нет ресурсов для увеличения. Затем, когда вы спускаетесь по дороге, вы можете масштабировать горизонтально (больше серверов) или вертикально (больше аппаратного обеспечения). Это продукт, который был перенесен из оригинального MemCached для работы в Windows. Этот продукт широко используется на очень высоких участках трафика. http://lineofthought.com/tools/memcached

Скорость:. Это ответ Microsoft на такие продукты, как MemCached. MemCached уже давно, Velocity находится в режиме CTP. Я должен сказать, что из того, что я прочитал до сих пор, этот продукт, безусловно, повернет мою голову, когда он исчезнет. Но я не могу заставить себя запускать большие производственные проекты на CTP-продукте с нулевой репутацией. Я начал играть с ним, хотя как только он набирает обороты, MemCached даже не сравнится для тех, кто заперт в мире окон! http://blogs.msdn.com/velocity/

Кэш .NET: Нет причин для скидки на стандартный кэш .NET. Он встроен и готов к использованию бесплатно и без необходимости (основной). Он предлагает гибкость, предлагая механизмы хранения элементов в локальной памяти, сервер состояния SINGLE или централизованную базу данных. Где Velocity работает, когда вам нужно больше одного сервера состояния (кэш в памяти) и не хотите использовать медленную базу данных для хранения кеша.

Блок Enterprise Application: Я держусь подальше от всех корпоративных приложений. Это тяжелые рамки, которые дают больше, чем я обычно требую! До тех пор, пока вы не забудете обернуть все, что касается кода, который не является вашим собственным, и следовать простым правилам кодирования, придерживайтесь любого другого метода над этим! (просто мое мнение, конечно, - MySpace использует как можно больше из Enterprise Application Blocks!)

Вам не нужно выбирать фронт! Я обычно создаю оболочку кэша, с которой я общаюсь в своем коде для таких методов, как Get, Set, Exists, Remove, ListKeys и т.д. Это затем указывает на базовый уровень абстракции кеша, который может указывать на кеш MemCached, Velocity или .NET. Я использую StructureMap (или выбираю другой контейнер IoC), чтобы ввести ту форму кеша, которую я хочу использовать для данной среды. В моем локальном блоке dev я могу использовать кеш .NET в сеансе. В производстве я обычно использую MemCached Win 32. Но независимо от того, как он настроен, вы можете легко поменять местами, чтобы попробовать каждую систему, чтобы увидеть, что лучше всего подходит для вас. Вам просто нужно убедиться, что ваше приложение знает как можно меньше о том, как вещи кэшируются! Как только этот слой абстракции находится на месте, вы можете делать такие вещи, как запустить алгоритм сжатия (gzip) для всех данных, которые поступают в и из кеша, что позволит вам хранить в 10 раз больше данных в кеше. - прозрачно.

Я расскажу об .NET Cache, MemCached Win32, StructureMap и соответствующих абстракциях в моей книге, если вы заинтересованы!

ASP.NET 3.5 Социальные сети (http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise- ready/dp/1847194788/ref = sr_1_1? ie = UTF8 & s = books & qid = 1225408005 & sr = 8-1) Эндрю Симер www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

Обновление Изменена ссылка, в которой перечислены сайты с использованием memcached. Спасибо, Дэвид, заметив, что он сломан!

Ответ 2

Имейте в виду, что документация EntLib специально направляет вас к кешу ASP.NET для приложений ASP.NET. Это, вероятно, самая сильная рекомендация по ее использованию здесь. Кроме того, кэш EntLib не имеет зависимостей, что для меня является большой причиной не использовать его.

Я не думаю, что существует техническое ограничение как таковое при отправке System.Web как часть вашего приложения, хотя это немного странно, что они отметили это на странице .NET 3.5. Гендельман на самом деле говорит, что начал из-за этого понятия, но убедился. Также, если вы читаете комментарии, он говорит, что в блоке слишком много движущихся частей, а кеш ASP.NET намного более легкий.
Я думаю, что это именно та проблема, что Velocity будет решать, но это только предварительный просмотр на данный момент:-(

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

Ответ 3

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

Ответ 4

@Davide Vosti

"Если они помещают его в пространство имен в Интернете, я думаю, что это по уважительной причине". Эта же логика относится к Concurrency и координирующему исполнению (CCR) в роботизированной студии? нет? так и не подумал.