System.Web.Caching против.Блок кэширования корпоративной библиотеки

StackOverflow https://stackoverflow.com/questions/21870

Вопрос

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

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

System.Web.Caching

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

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

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

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

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

Мемкеш для Win32 + .NET-клиент

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

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

Решение

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

Memcached win32 Velocity .net Cache Enterprise Library Caching Block

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

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

.NET-кэш: Нет причин сбрасывать со счетов стандартный .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 ) Andrew Siemer www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

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

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

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

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

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

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

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

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

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