Cache是一個絕大多數項目會用到的一個技術,提及到緩存可能就聯想到 Set、Add、Get、Remove、Clear 這幾個方法。那麼在.NET Core中微軟給咱們帶來了什麼樣的緩存體驗呢?今天咱們就來介紹下」Microsoft.Extensions.Caching.Memory」。因爲這個包名稱過長,下文使用MSCache來代替。git
MSCache目前最新的正式版是 2.0.0,預覽版是2.1.0,會與.NETCore 2.1一塊兒發佈。本篇用了2.0.0版本github
開源在GitHub上,倉庫地址是:https://github.com/aspnet/Caching緩存
NuGet地址爲:https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/2.0.03d
IMemoryCache 就提供了三個方法並實現了 IDisposable 接口。blog
很好理解繼承
CreateEntry 添加一個緩存token
Remove 刪除一個緩存接口
TryGetValue 獲取一個緩存(並可獲得具體的緩存是否存在)內存
ICacheEntry 有以上成員,同時實現了 IDisposable 接口,爲何要實現這個接口?用來釋放緩存嗎?這個在接下來的篇幅會作解釋。資源
Key 緩存key
Value 緩存值
AbsoluteExpiration 絕對過時時間,爲null則條件無效
AbsoluteExpirationRelativeToNow 相對當前時間的絕對過時時間(使用TimeSpan),爲null條件無效
SlidingExpiration 滑動過時時間
ExpirationTokens 提供用來自定義緩存過時
PostEvictionCallbacks 緩存失效回調
Priority 緩存項優先級(在緩存滿載的時候絕對清除的順序)
Size 表明緩存數據的大小,在內存緩存中通常爲null
恩,妥妥的,輸出 「True」 和 「1」。
納尼,竟然是「False」和null。
有些同窗可能已經注意到了 ICacheEntry 實現了IDisposable接口。爲何ICacheEntry要實現 IDisposable 接口呢?講真我也不知道。反正你們知道它是具體像MemoryCache插入緩存的方法就行。
這有點違背了咱們以前所學的 IDisposable 用來釋放資源的原則。
說到底還不是 Set、Add、Get、Remove、Clear ?跟以前差很少啊。
MS團隊提供了一個 CacheExtensions 擴展方法類
Get 比較好理解這邊很少作累述。
Set 設置一個新的緩存條目(相同key的會被移除)就好像被set的這個key是一個徹底新的東西,因此也不會繼承以前的過時時間和過時token。
基本都用它,咱們來看看。
兩種方式 GetOrCreate 減小了第一種模式的判斷。回調裏面的entry就是ICacheEntry能夠用來設置緩存的其它選項。
同時在這個Task滿天飛的日子裏,還提供了了 GetOrCreateAsync 擴展方法。
MSCache跟Orchard中的Caching很是的相識,或者說借鑑了Orchard中良好的Caching重構而來。
下一篇會主要介紹MSCache中的緩存過時機制。
.NET技術棧QQ羣:384413261(點擊加入 .NET Group)