2015-10-19 69 views
0

我使用截止日期復位/已覆蓋在App面料緩存提供

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

我知道有這樣的Timeout方法。我的問題是,當我去那裏取代現有的鍵值時,可能已經超時,並且我不知道當我想要替換的時候,我不能簡單地放30000. –

+1

啊,不清楚你的問題。我不太明白你爲什麼要這樣做,但聽起來你必須得到這個項目,確定剩餘的超時時間,並設置它。 – stuartd