System.Web.Caching vs. Enterprise Library Кэширующий блок - PullRequest
29 голосов
/ 22 августа 2008

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

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

System.Web.Caching

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

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

Блок приложения для кэширования Enterprise Library

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

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

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

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

Ответы [ 4 ]

18 голосов
/ 12 июня 2009

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

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 Cache: Нет оснований для дисконтирования стандартного .NET Cache. Он встроен и готов к использованию бесплатно и не требует (основной) настройки. Он предлагает гибкость, предлагая механизмы для хранения элементов в локальной памяти, на одном сервере состояний или в централизованной базе данных. Velocity вступает в действие, когда вам нужно более одного сервера состояний (кеш в памяти) и вы не хотите использовать медленную базу данных для хранения кеша.

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

Вам не нужно выбирать заранее! Обычно я создаю оболочку кэша, с которой я общаюсь в своем коде, для таких методов, как Get, Set, Exists, Remove, ListKeys и т. Д. указывает на базовый уровень абстракции кэша, который может указывать на кэш MemCached, Velocity или .NET. Я использую StructureMap (или выбираю другой контейнер IoC), чтобы ввести, какую форму кэша я хочу использовать для данной среды. В моем локальном окне разработчика я мог бы использовать кеш .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. Спасибо, Дэвид, за то, что заметил, что он сломан!

3 голосов
/ 22 августа 2008

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

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

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

2 голосов
/ 22 августа 2008

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

0 голосов
/ 23 октября 2008

@ Давиде Вости

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

...