System.Web.Caching vs. Enterprise Library Кэширующий блок

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

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

System.Web.Caching

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

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

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

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

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

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

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

22.08.2008 06:07:29
4 ОТВЕТА
РЕШЕНИЕ

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

MemCached Win32 Velocity. 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. Спасибо, Дэвид, за то, что заметил, что он сломан!

18
14.06.2013 14:44:02
Описывает ли ваша книга слой кеш-оболочки, о котором вы упоминали?
frankadelic 16.01.2010 00:51:36
Здесь обсуждается концепция обёрток. Я думаю, что я обернул туда кеш, но я не уверен, насколько глубоко в MemCached я попал. Вы можете использовать клиент Enyim MemCached за вашей оберткой. Однако теперь, когда MS Velocity выходит на сцену, вы, возможно, захотите сделать более умную оболочку вокруг Velocity (она обладает множеством функциональных возможностей, которых нет у MemCached. И если вы находитесь в стеке MS, вы не ошибетесь с Velocity.
Andrew Siemer 22.01.2010 07:22:17
Я знаю, что это довольно старый ответ, но ссылка на сайты трафика Memcached не работает (404). Очень хороший ответ, хотя!
David Conde 14.06.2013 00:46:31
Дэвид - я исправил неработающую ссылку! Спасибо, что поймали это.
Andrew Siemer 14.06.2013 14:44:36

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

2
22.08.2008 06:21:15

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

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

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

3
22.08.2008 09:37:44
Стоит отметить, что в .NET 4.0 они убирают биты кэширования из System.Web специально для решения этой проблемы.
PhilPursglove 27.05.2009 13:47:24

@Davide Vosti

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

-2
23.10.2008 00:28:11
Это худший / самый слабый аргумент, который я слышал. Кэш, скорее всего, был реализован командой asp.net, потому что он действительно был необходим в веб-сценарии, поэтому он оказался в этом пространстве имен. Однако, будучи умными ребятами, они создали его без каких-либо зависимостей от IIS. Он просто должен быть перемещен в пространство имен system.caching.
Micah 28.08.2009 13:25:51