拥抱.NET Core系列:MemoryCache 初识
MSCache能做什么?
絕對過期支持
滑動過期支持(指定一個時間,TimeSpan,指定時間內有被Get緩存時間則順延,否則過期)
過期回調
自定義過期
MSCache目前最新的正式版是 2.0.0,預覽版是2.1.0,會與.NETCore 2.1一起發布。本篇用了2.0.0版本
開源在GitHub上,倉庫地址是:https://github.com/aspnet/Caching
NuGet地址為:https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/2.0.0
回到目錄
從IMemoryCache說起
IMemoryCache 就提供了三個方法并實現了 IDisposable 接口。
很好理解
CreateEntry?添加一個緩存
Remove?刪除一個緩存
TryGetValue?獲取一個緩存(并可得到具體的緩存是否存在)
ICacheEntry
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
基本都用它,我們來看看。
兩種方式 GetOrCreate 減少了第一種模式的判斷。回調里面的entry就是ICacheEntry可以用來設置緩存的其它選項。
同時在這個Task滿天飛的日子里,還提供了了?GetOrCreateAsync?擴展方法。
回到目錄
寫在最后
MSCache跟Orchard中的Caching非常的相識,或者說借鑒了Orchard中良好的Caching重構而來。
下一篇會主要介紹MSCache中的緩存過期機制。.NET技術棧QQ群:384413261
相關文章:
擁抱.NET Core系列:依賴注入(1)
擁抱.NET Core系列:依賴注入(2)
原文:http://www.cnblogs.com/ants/p/8477223.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com 
總結
以上是生活随笔為你收集整理的拥抱.NET Core系列:MemoryCache 初识的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 树莓派3B上部署运行.net core
 - 下一篇: Ocelot中使用Butterfly实践