2010-03-04 3 views
4

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

Мое основное требование - надежность с кэшированными данными, я думал об использовании хранилища данных DB блока данных Enterprise Lib для сохранения в случае перезапуска рабочего процесса.

Любые варианты?

ответ

4

Ваш кэш является летучим хранилище данных, вы должны написать программу так, чтобы она ОЖИДАЕТ, что кэш недоступен , например

public DtoThing GetSomeData(string parameters) 
{ 
    if (<check cache for data> == <not there>) 
    return <get data from persistent store> 
    else 
    return <get data from cache> 
} 

Если вы используете базу данных в качестве резервного хранилища для кэша, вы в основном только уступлены все преимущества использования кэша. Когда вы говорите, что кеш должен быть надежным, вы говорите, что обновления должны быть согласованными или что данные всегда должны быть в кеше? Если первое, легко убедиться, что это происходит до тех пор, пока вы пишете свое программное обеспечение таким образом, что есть только один путь для обновления данных, а затем этот путь может привести к аннулированию кеша при успешном выполнении его записи в постоянном хранилище данных.

+0

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

+0

Опять же, вы не получаете доступ к кешу напрямую, вы получаете доступ к кэшированным данным через соответствующий компонент уровня бизнес-логики, который абстрагирует проверку кеша в памяти и постоянное хранилище данных. Выполнение этого каким-либо другим способом приведет к неудаче. –

3

У меня есть опыт работы с блоком Cache для корпоративной библиотеки Microsoft, и он отлично работает для меня. Конфигурация EntLib иногда может быть немного многословной, но она выполняет задание. Есть ли особая причина, по которой вы ищете что-то еще?

+0

я не слишком уверен, что фактор надежности, и никогда не использовал его с БД в качестве хранилища данных. –

+1

мы используем его в производственной среде, он был стабильным для нас с БД в качестве хранилища данных. Существует также, в настройках памяти ... backingStoreName = "Null Storage" –

1

Пара приходит на ум:

1) Memcached

2) Enterprise Library Caching Application Block

+0

Можно ли использовать memcached в .NET? –

+0

Да, вы можете, memcached - это серверное приложение, и вам нужно загрузить для него один из клиентов .net. –

5

Вы можете проверить GigaSpaces XAP.NET, который является полностью распределенной и транзакцией в сетке данных памяти, которая может служить кешем среди многих других вещей. Он также может быть вашим фактическим сервером приложений, который позволяет развертывать ваше приложение в распределенной форме вместе с распределенным кешем. Это высокодоступная, самовосстанавливающаяся и автономная сетка, которую вы можете масштабировать и по требованию.

Отказ от ответственности - Я работаю для GigaSpaces.

0

Существует много потенциальных решений для такого типа вопросов. Вы упомянули, глядя на NCache; если у вас есть время, ознакомьтесь с Oracle Coherence, который является продуктом, который NCache попытался скопировать ;-)

Мое предложение состоит в том, что если вам не нужны преимущества распределенного кеша, то это намного проще просто используйте однопроцессорный кеш в памяти.

И только в случае, если вам интересно, один в начале дискуссии о происхождении NCache в: http://www.theserverside.com/news/thread.tss?thread_id=43950

Смежные вопросы