2016-07-22 44 views
0

我有過MemoryCache一個抽象的IOC容器,這種情況下使用AbsoluteExpirationCacheItemPolicy,由Autofac如下管理:的MemoryCache與AbsoluteExpiration存儲在使用.SingleInstance()

builder 
    .RegisterType<MyCache>() 
    .As<IMyCache>() 
    .SingleInstance() 
    .WithParameter("cacheName", "MyCache"); 

理論上我想要的項目完全失效(例如在15分鐘內)。

問題(問題)是,它是所有請求中的單個實例,並且沒有適當的機制將過期重新設置爲15分鐘。 所以刷新只會發生一次,對吧?

這是什麼解決方案?我需要勾選一個事件或...?

+1

你可以發佈MyCache的代碼? –

回答

0

我的問題是,我需要時間來指定某一點在高速緩存密鑰過期:

AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15) 

緩存政策被設置在private readonly field只創造MyCache實例時被初始化,但是這隻發生在應用程序啓動(IoC容器,單實例)上。

現在,這對我的作品:

private CacheItemPolicy CachePolicy => new CacheItemPolicy 
{ 
    AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15) 
}; 

每次緩存項政策被訪問,計算新的DateTimeOffset

1

緩存項目策略以每個項目爲基礎工作。添加一個項目,15分鐘後過期(根據您的物品政策)。沒有「重置」或任何要求。它不像計時器或信號量那樣工作 - 添加東西,緩存處理剩下的東西。

您可以通過使策略足夠短(一分鐘?)添加內容並等待來測試。

+0

是的,但我的問題是我需要指定緩存鍵過期的某個時間點:'AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15)'。緩存策略是在私有隻讀字段中設置的,只有在創建「MyCache」實例時才初始化,但這隻發生在應用程序啓動(IOC容器,單實例)上。這現在適用於我:'私人CacheItemPolicy CachePolicy =>新CacheItemPolicy {AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(15)...};'。每次訪問緩存項目策略時,都會計算一個新的DateTimeOffset。 – timmkrause

相關問題