ABP理論學習之緩存Caching
本篇目錄
介紹###
ABP提供了緩存的抽象,它內部使用了這個緩存抽象。雖然默認的實現使用了MemoryCache,但是也可以為其他的緩存提供者進行實現和改變。
ICacheManager###
緩存的主要接口是ICacheManager。我們可以注入該接口,然后使用該接口獲得一個緩存對象。例如:
public class TestAppService : ApplicationService
{
private readonly ICacheManager _cacheManager;
public TestAppService(ICacheManager cacheManager)
{
_cacheManager = cacheManager;
}
public Item GetItem(int id)
{
//從緩存中獲取
return _cacheManager
.GetCache("MyCache")
.Get(id.ToString(), () => GetFromDatabase(id)) as Item;
}
public Item GetFromDatabase(int id)
{
//... 從數據庫中檢索
}
}
在這個例子中,我們注入了ICacheManager,并獲取了一個叫做MyCache的緩存對象。
警告:GetCache方法
不要在構造函數中使用GetCache方法。如果你的類是transient(每次使用都會創建)的,那么這可能會釋放緩存,因為第二次創建類的對象時,會再次調用構造函數,之前的第一次的緩存可能會被釋放。
ICache###
ICacheManager.GetCache方法返回一個ICache。緩存對象是單例的,第一次請求時會創建緩存,以后都是返回相同的緩存對象。因此,我們可以在不同的類(客戶端)中共享具有相同名字的相同緩存。
在樣例代碼中,我們看到了ICache.Get方法的簡單使用。它有兩個參數:
- key:緩存中一個條目的唯一字符串鍵。
- 工廠:沒有找到給定key的緩存條目時調用的action。工廠方法應該創建并返回實際的條目。如果給定的key在緩存中找到了,那么不會調用該action。
ICache接口也有像GetOrDefault,Set,Remove,Clear的方法。同時,這些方法也有異步(async)版本。
ITypedCache###
ICache接口的key為string類型,value為object類型。ITypeCache是ICache的包裝器,提供類型安全、泛型的cache。為了將ICache轉為ITypedCache,我們可以使用AsTyped擴展方法,如下所示:
ITypedCache<int, Item> myCache = _cacheManager.GetCache("MyCache").AsTyped<int, Item>();
這樣,我們不需要轉換就可以使用Get方法。
配置###
默認的緩存有效期是60min。因此,如果你在60min內都沒有使用緩存中的元素,那么它會自動從緩存中移除。對于所有的緩存或者特定的某個緩存,你都可以配置有效期。
//為所有緩存配置有效期
Configuration.Caching.ConfigureAll(cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(2);
});
//為特定的緩存配置有效期
Configuration.Caching.Configure("MyCache", cache =>
{
cache.DefaultSlidingExpireTime = TimeSpan.FromHours(8);
});
這些代碼應該放到模塊中的PreInitialize方法中。有了這樣的配置,MyCache會有8小時的有效期,而其他cache會有2小時有效期。
一旦cache首次創建(第一次請求時),就會調用配置的action。配置并不只局限于DefaultSlidingExpireTime(默認滾動有效期),因為cache對象是一個ICache,你可以使用它的屬性和方法自由地配置并初始化。
已將所有贊助者統一放到單獨頁面!簽名處只保留最近10條贊助記錄!查看贊助者列表
| 衷心感謝打賞者的厚愛與支持!也感謝點贊和評論的園友的支持! | |||
|---|---|---|---|
| 打賞者 | 打賞金額 | 打賞日期 | |
| 微信:匿名 | 10.00 | 2017-08-03 | |
| 微信:匿名 | 10.00 | 2017-08-04 | |
| 微信:匿名 | 5.00 | 2017-06-15 | |
| 支付寶:一個名字499***@qq.com | 5.00 | 2017-06-14 | |
| 微信:匿名 | 16.00 | 2017-04-08 | |
| 支付寶:向京劉 | 10.00 | 2017-04-13 | |
| 微信:匿名 | 10.00 | 2017-003-08 | |
| 微信:匿名 | 5.00 | 2017-03-08 | |
| 支付寶:lll20001155 | 5.00 | 2017-03-03 | |
| 支付寶:她是一個弱女子 | 5.00 | 2017-03-02 | |

浙公網安備 33010602011771號