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





Взгляните на memcached. Это действительно крутая, быстрая и легкая система распределенного кеширования. Существуют API-интерфейсы для нескольких самых популярных языков, включая C#. Он может плохо работать на стороне клиента (если, конечно, клиент не получает кэшированные данные с какого-либо сервера), но если вы абстрагируете свое использование memcached до определенного интерфейса, вы можете затем реализовать интерфейс с другим кешированием система.
Имейте в виду, что документация EntLib специально направляет вас к кешу ASP.NET для приложений ASP.NET. Вероятно, это самая сильная рекомендация использовать его здесь. Кроме того, кеш EntLib не имеет зависимостей, что для меня является серьезной причиной не использовать его.
Я не думаю, что существует техническое ограничение как таковое на доставку System.Web как части вашего приложения, хотя немного странно, что они поместили это уведомление на странице .NET 3.5. Гензельман на самом деле говорит, что сначала он был сбит с толку этой идеей, но убедился. Также, если вы читаете комментарии, он говорит, что в блоке слишком много движущихся частей, а кэш ASP.NET намного легче. Я думаю, что это именно та проблема, которую Скорость собирается решить, но пока это только предварительный просмотр :-(
Я бы сказал, используйте Web.Caching и посмотрите, как у вас дела. Если вы поместите поверх него какой-то слой абстракции, у вас всегда будет возможность поменять его на блок EntLib позже, если вы обнаружите проблемы.
@ Дэвид Вости
«Если они поместили его в пространство имен Web, я думаю, что на это есть веская причина». Применяется ли та же логика к среде выполнения параллелизма и координации (CCR) в робототехнической студии? нет? так не думал.
Это худший / самый слабый аргумент, который я слышал. Кеш, скорее всего, был реализован командой asp.net, потому что он действительно был нужен в веб-сценарии, поэтому он оказался в этом пространстве имен. Однако, будучи умными ребятами, они создали его без каких-либо зависимостей от IIS. Его нужно просто переместить в пространство имен system.caching.
Вот элементы, которые я рассматриваю для темы кэширования:
MemCached Win32 Скорость .net Кэш Блок приложения для кэширования корпоративной библиотеки
MemCached Win32: До недавнего времени я использовал MemCached Win32. Это похоже на веб-ферму (многие серверы обслуживают один и тот же контент для обеспечения высокой доступности), но это ферма кешей. Это означает, что вы можете изначально установить его локально на своем веб-сервере, если у вас нет ресурсов для расширения. Затем по мере продвижения вы можете масштабироваться по горизонтали (больше серверов) или вертикально (больше оборудования). Это продукт, который был перенесен из оригинального MemCached для работы в Windows. Этот продукт широко используется на сайтах с очень высокой посещаемостью. http://lineofoughtt.com/tools/memcached
Скорость: Это ответ Microsoft на такие продукты, как MemCached. MemCached уже давно отсутствует, Velocity находится в режиме CTP. Я должен сказать, что, судя по тому, что я прочитал до сих пор, этот продукт наверняка повернет мне голову, когда он выйдет. Но я не могу заставить себя запускать большие производственные проекты на продукте CTP с нулевым послужным списком. Я начал играть с ним, хотя, как только он наберет обороты, MemCached даже не будет сравниваться с теми, кто заблокирован в мире Windows! http://blogs.msdn.com/velocity/
Кэш .NET: Нет причин отказываться от стандартного .NET Cache. Он встроен и готов к использованию бесплатно и не требует (серьезной) настройки. Он предлагает гибкость, предлагая механизмы для хранения элементов в локальной памяти, на сервере с одним состоянием или в централизованной базе данных. Вмешательство Velocity происходит тогда, когда вам нужно более одного сервера состояний (кеш в памяти) и вы не хотите использовать медленную базу данных для хранения вашего кеша.
Блок корпоративного приложения: Я держусь подальше от всех блоков корпоративных приложений. Это тяжелые фреймворки, которые дают больше, чем мне обычно требуется! Если вы не забываете обернуть все, что касается кода, который вам не принадлежит, и следовать простым правилам кодирования, придерживайтесь любого другого метода вместо этого! (это, конечно, только мое мнение - MySpace максимально использует возможности Enterprise Application Blocks!)
Вам не нужно выбирать заранее! Я обычно создаю оболочку кеша, с которой я взаимодействую в своем коде для таких методов, как 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. Спасибо, Дэвид, что заметил, что он сломался!
Описывает ли ваша книга упомянутый вами слой оболочки кеша?
Обсуждается концепция оберток. Я думаю, что я обернул туда кеш, но я не уверен, насколько глубоко я проник в MemCached. Однако вы можете использовать клиент Enyim MemCached за своей оболочкой. Однако теперь, когда на сцену выходит MS Velocity, вы, возможно, захотите создать более умную оболочку для Velocity (она имеет множество функций, которых нет в MemCached. И если вы находитесь в стеке MS, вы не ошибетесь с Velocity.
Я знаю, что это довольно старый ответ, но ссылка на сайты трафика Memcached не работает (404). Тем не менее, очень хороший ответ!
Дэвид - я исправил неработающую ссылку! Спасибо, что поймали это.
Стоит отметить, что в .NET 4.0 они перемещают биты кеширования из System.Web специально для решения этой проблемы.