2015-10-19 4 views
0

Я используюДата истечения срока действия Сброс/переопределено на App Fabric Cache Provider

Microsoft.ApplicationServer.Caching.DataCache для кэширования

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

DataCache cache= new MyDataCahce(); 
// time out 30 secs 
cache.Add("key",10, TimeSpan.FromMilliseconds(30000)); 
var temp = _cache.GetCacheItem("key"); 
temp.Timeout(); // minutes = 30 seconds which is correct 

// Second time replace object at key 
cache.Put("key",20) 
var temp = _cache.GetCacheItem("key"); 
temp.Timeout(); // timeout reset to default and equals 10 minutes which is the default 

ответ

0

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

DataCache cache= new MyDataCahce(); 
    // time out 30 secs at first 
    cache.Add("key",10, TimeSpan.FromMilliseconds(30000)); 
    var temp = _cache.GetCacheItem("key"); 
    temp.Timeout(); // minutes = 30 seconds which is correct 


    // Second time replace object at key may be after 10 seconds 
    var temp = _cache.GetCacheItem("key"); 
if(temp!=null) // it is not expired yet 
{ 
    var timeOut = temp.Timeout(); // less than 30 seconds should be about 20 seconds 
    cache.Put("key",20, timeOut) 
    var temp = _cache.GetCacheItem("key"); 
    temp.Timeout(); // timeout less than 30 seconds 
} 
0

Как вы отметили - и, как документированы - что Put метод «Добавляет или заменяет объект в кэше»

Таким образом, вы должны поэтому использовать overload of Put, который позволяет определить отрезок времени, то есть:

cache.Put("key", 20, TimeSpan.FromMilliseconds(30000)); 
+0

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

+1

А, t непонятно из вашего вопроса. Я не совсем понимаю, почему вы это сделаете, но похоже, что вам нужно будет получить элемент, определить, сколько времени осталось, и установить его. – stuartd