2013-12-23 3 views
1

У меня есть таблица в sql-сервере, которую я буду многократно запрашивать из .net-кода MVC, и я хочу реализовать кэширование appfabric вместо SQL-запроса сервера (только для этого запроса). Как это реализовать? Если запрос похож: выберите адрес от людей, где id = @cid;appcabric кэширование вместо запроса sql-сервера

чид может быть 1,2 или 3, который приходит из кода

+0

[Это сообщение в блоге] (http://www.hanselman.com/blog/InstallingConfiguringAndUsingWindowsServerAppFabricAndTheVelocityMemoryCacheIn10Minutes.aspx) должно покрывать большую часть того, что вам нужно. –

ответ

3

ли вам действительно нужно AppFabric для этого сценария?

Я имею в виду, что кэширование AppFabric нацелено на большие объемы веб-сайтов, где база данных является узким местом, а локальное кэширование уже не является хорошим выбором. Да, это кеширование, но для больших данных и распределенных сценариев. Кроме того, вам необходимо установить дополнительные выделенные серверы для уровня кэширования.

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

Вот простой пример:

//Create a cache instance 
ObjectCache cache = MemoryCache.Default;  

//check the cache for a specific value 
if (cache.Contains("mydata"))  
{   
    //get an item from the cache 
    var value=cache.Get("mydata");  
}  
else  
{  
    //load data 
    var data=fetchData(); 
    //add an data to the cache 
    cache.Add("mydata", data);  
} 

Для кэширования небольшого фрагмента данных и один (или несколько) веб-сервера, это достаточно справедливо.

+0

Пока вам не нужно удалять кеш удаленно - и вы нацеливаете .Net> = 4 - [MemoryCache] (http://msdn.microsoft.com/en-us/library/system.runtime .caching.memorycache (v = vs.110) .aspx) действительно очень полезен. У нас есть система, в которой мы используем кластер AppFabric, возвращаясь к MemoryCache, если кластер не работает: мы должны признать, что мы не можем аннулировать кэшированные данные для срока хранения кеша MemoryCache, но это приемлемо в нашем сценарии, и мы используйте короткое время кэширования в MemoryCache, чтобы уменьшить проблему. – stuartd

+0

Я просто изучаю основы, наше приложение имеет большой объем. Таким образом, нам нужно начинать с appfabric постепенно. – Nithin

+0

@Nithin Как я уже сказал, перед тем, как прыгать в AppFabric, попробуйте MemoryCache. С небольшим количеством абстракционистов не так сложно реализовать общий клиент кеша для MemoryCache и AppFabric и переключиться между реализациями с вашим любимым IoC. Высокий объем не является реальной проблемой. Важно: сколько у вас веб-серверов? Что такое db-активность? – Cybermaxs

0

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

public Address GetData(int cId) 
{ 
    const string AddressCacheKeyBase = "AddressCacheKey"; 
    string key = AddressCacheKeyBase + cId; 

    var cachedData = cache.Get(key); 

    if (cachedData != null) 
    { 
     return (Address)cachedData;  
    } 

    Address address = GetAddressFromDatabase(cID); 
    cache.Add(key, address); 

    return address; 
} 
+0

Можем ли мы иметь один ключ с несколькими значениями в кеше? Может быть, как единый объект? – Nithin

+0

@ Если вы, безусловно, можете использовать «Словарь » и иметь в качестве значения Id как ключ и Адрес. Однако, когда вам нужно добавить или недействить - значение, вам необходимо прочитать словарь из кеша, добавить или обновить адрес, а затем сохранить словарь обратно в кеш. – stuartd