Предложения для простого решения распределенного кэширования .NET - PullRequest
5 голосов
/ 08 декабря 2011

У нас есть один сервер под управлением Windows Server 2003 для нашего рабочего веб-сервера. Наш веб-сайт имеет различные модули, и каждый работает в своем собственном пуле приложений. Это делает кеширование небольшой проблемой, поскольку каждый модуль имеет свой собственный кеш, и часто несколько модулей кешируют одни и те же элементы. Проблема заключается в том, что когда элемент в кэше изменяется в одном модуле, другой модуль, кэширующий тот же элемент, не может быть легко обновлен.

Наш сайт написан на ASP.NET 4.0, и мы кэшируем наборы данных, бизнес-объекты, коллекции, списки и т. Д., Используя стандартный объект HttpRuntime.Cache в качестве простого хранилища ключей / значений. Мы не используем никаких файловых зависимостей, но мы используем истечение времени. У нас всего около 400 пользователей одновременно, поэтому мы не делаем ничего сумасшедшего.

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

Я ищу что-то простое, быстрое, легкое, безопасное для запуска в производстве и желательно бесплатное, если это возможно, но это не обязательно. Он должен работать на Windows Server 2003 и работать с ASP.NET 4.0.

Есть предложения или информация?

Ответы [ 4 ]

12 голосов
/ 08 декабря 2011

Простой, быстрый, легкий и безопасный звук, похожий на такие вещи, как redis и memcached, который может быть очень эффективным в качестве центрального кэша.Для стекового потока мы используем redis через BookSleeve (клиент), но большинство магазинов будет работать аналогично.Существует также кэш AppFabric, но он значительно сложнее.

Ключевые моменты:

  • ваши данные должны быть каким-то образом сериализуемыми
  • , еслив настоящее время вы используете кэш больших объектов (например, большой DataTable), вам необходимо учесть последствия пропускной способности или сделать его более детализированным
  • вам, вероятно, будет полезен двухуровневый кэш (одна локальная память,с центральным хранилищем в качестве вторичного)
  • , что означает, что вам также необходимо учитывать аннулирование (мы делаем это через API pub / sub в redis)
7 голосов
/ 08 декабря 2011

memcached вместе с ASP.NET провайдером является популярным выбором. Имейте в виду, что в .NET 4.0 рекомендуемый способ кэширования - использовать новый ObjectCache вместо HttpRuntime.Cache. В .NET Framework есть встроенная реализация памяти ( MemoryCache ), а также вы можете проверить реализацию для memcached .

3 голосов
/ 23 октября 2013

Дай попробовать Дачу. Это решение распределенного кэширования с открытым исходным кодом .NET, которое чрезвычайно эффективно. http://www.getdache.net

0 голосов
/ 03 июля 2012

если цена не является проблемой, тогда NCache может быть лучшим вариантом для вас. Его последняя версия (NCache 4.1) работает с .NET 4.0

...