.NET Core系列之MemoryCache 初識
Cache是一個絕大多數(shù)項目會用到的一個技術(shù),說起到緩存可能就聯(lián)想到 Set、Add、Get、Remove、Clear 這幾個方法。那么在.NET Core中微軟給我們帶來了什么樣的緩存體驗?zāi)??今天我們就來介紹下”Microsoft.Extensions.Caching.Memory”。由于這個包名稱過長,下文使用MSCache來代替。
MSCache能做什么?
- 絕對過期支持
- 滑動過期支持(指定一個時間,TimeSpan,指定時間內(nèi)有被Get緩存時間則順延,否則過期)
- 過期回調(diào)
- 自定義過期
MSCache目前最新的正式版是 2.0.0,預(yù)覽版是2.1.0,會與.NETCore 2.1一起發(fā)布。本篇用了2.0.0版本
開源在GitHub上,倉庫地址是:https://github.com/aspnet/Caching
NuGet地址為:https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/2.0.0
從IMemoryCache說起
IMemoryCache 就提供了三個方法并實現(xiàn)了 IDisposable 接口。
很好理解
CreateEntry 添加一個緩存
Remove 刪除一個緩存
TryGetValue 獲取一個緩存(并可得到具體的緩存是否存在)
ICacheEntry
ICacheEntry 有以上成員,同時實現(xiàn)了 IDisposable 接口,為什么要實現(xiàn)這個接口?用來釋放緩存嗎?這個在接下來的篇幅會做解釋。
Key 緩存key
Value 緩存值
AbsoluteExpiration 絕對過期時間,為null則條件無效
AbsoluteExpirationRelativeToNow 相對當(dāng)前時間的絕對過期時間(使用TimeSpan),為null條件無效
SlidingExpiration 滑動過期時間
ExpirationTokens 提供用來自定義緩存過期
PostEvictionCallbacks 緩存失效回調(diào)
Priority 緩存項優(yōu)先級(在緩存滿載的時候絕對清除的順序)
Size 代表緩存數(shù)據(jù)的大小,在內(nèi)存緩存中一般為null
我們來試試
恩,妥妥的,輸出 “True” 和 “1”。
納尼,居然是“False”和null。
玄學(xué)
有些同學(xué)可能已經(jīng)注意到了 ICacheEntry 實現(xiàn)了IDisposable接口。為什么ICacheEntry要實現(xiàn) IDisposable 接口呢?講真我也不知道。反正大家知道它是具體像MemoryCache插入緩存的方法就行。
這有點違背了我們之前所學(xué)的 IDisposable 用來釋放資源的原則。
正確的打開方式
開發(fā)者的體驗
說到底還不是 Set、Add、Get、Remove、Clear ?跟之前差不多啊。
MS團(tuán)隊提供了一個 CacheExtensions 擴(kuò)展方法類
Get 比較好理解這邊不多做累述。
Set 設(shè)置一個新的緩存條目(相同key的會被移除)就好像被set的這個key是一個完全新的東西,所以也不會繼承之前的過期時間和過期token。
GetOrCreate
基本都用它,我們來看看。
兩種方式 GetOrCreate 減少了第一種模式的判斷?;卣{(diào)里面的entry就是ICacheEntry可以用來設(shè)置緩存的其它選項。
同時在這個Task滿天飛的日子里,還提供了了 GetOrCreateAsync 擴(kuò)展方法。
寫在最后
MSCache跟Orchard中的Caching非常的相識,或者說借鑒了Orchard中良好的Caching重構(gòu)而來。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
.NET技術(shù)棧QQ群:384413261(點擊加入 .NET Group)
相關(guān)文章
ASP.NET 鏈接 Access 數(shù)據(jù)庫路徑問題最終解決方案
ASP.NET 鏈接 Access 數(shù)據(jù)庫路徑問題最終解決方案...2007-04-04asp.net實現(xiàn)調(diào)用存儲過程并帶返回值的方法
這篇文章主要介紹了asp.net實現(xiàn)調(diào)用存儲過程并帶返回值的方法,結(jié)合實例形式較為詳細(xì)的分析了asp.net存儲過程調(diào)用的相關(guān)技巧,需要的朋友可以參考下2016-03-03ASP.NET中防止頁面刷新造成表單重復(fù)提交執(zhí)行兩次操作
本文主要介紹在Session存儲唯一標(biāo)識Token,通過和后臺對比,以實現(xiàn)防止刷新提交表單的問題。2016-04-04適用與firefox ASP.NET無刷新二級聯(lián)動下拉列表
適用與firefox ASP.NET無刷新二級聯(lián)動下拉列表...2007-08-08ASP.NET技巧:數(shù)據(jù)島出到Excel最為簡易的方法
ASP.NET技巧:數(shù)據(jù)島出到Excel最為簡易的方法...2006-09-09ASP.NET中實現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇
許多時候,我們需要在因特網(wǎng)上提供文件下載服務(wù),但是又要防止未經(jīng)授權(quán)的下載,這時該怎么辦?本文將為讀者詳細(xì)介紹一種使用ASP.NET實現(xiàn)的HTTP處理程序的解決方案。2011-02-02運用.NetCore實例講解RabbitMQ死信隊列,延時隊列
這篇文章主要運用.NetCore實例講解RabbitMQ死信隊列,延時隊列,,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-09-09