亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core中MemoryCache怎么實現緩存過期

發布時間:2021-06-08 16:14:20 來源:億速云 閱讀:275 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關.NET Core中MemoryCache怎么實現緩存過期,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

MSCache項目

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

MSCache提供的過期方式

從源碼來說,MSCache提供了以下三種緩存過期的方式

絕對到期(指定在一個固定的時間點到期)滑動到期(在一個時間長度內沒有被命中則過期)到期Token(自定義過期)

下面我們來一一看看這些方式。

絕對時間到期

.NET Core中MemoryCache怎么實現緩存過期

絕對到期非常的簡單,MS提供了一個擴展方法 “SetAbsoluteExpiration” 用來設置絕對到期時間。

.NET Core中MemoryCache怎么實現緩存過期

這邊的第一個方法定義中的 relative 是指從當前時間度過這么久的時間之后過期,類似 DateTime.Now.Add(relative)。

為什么說類似呢?

因為每個國家地區的時間可能不一致,MSCache默認使用了UTC時間,這個時間可以在options進行修改,后面在做介紹。

滑動時間到期

.NET Core中MemoryCache怎么實現緩存過期

除了前兩次迭代滿足2秒內命中緩存,剩余的3次迭代無法滿足2秒內命中,所以從第三次迭代開始緩存項都會過期。

自定義過期策略

很多時候我們的緩存過期條件并不是只有時間,比如我們對一個文件內容進行了緩存,當文件變動的時候需要重新加載文件更新緩存。再比如我們緩存了用戶信息,在一個bus上接收到了用戶信息變動后清除用戶緩存并重新緩存用戶。

MS為我們提供了一個非常簡單的自定義過期策略。

MS把這個過期策略使用一個接口 IChangeToken 來暴露。下面我們來看看 IChangeToken。

IChangeToken

IChangeToken不完全為MS而生,而是一個基礎包里面的接口,所以在理解這個接口的時候盡量不要帶入緩存來考慮。

.NET Core中MemoryCache怎么實現緩存過期

HasChanged 顧名思義,用來返回是否發生了變更,在MSCache中如果返回了true則緩存項將會失效。

ActiveChangeCallbacks 一個有點玄學的屬性,該屬性更多是一種描述,字面意思是該token是否會激活回調,取決于IChangeToken實現者的邏輯,如果這個值返回false則不要期望通過IChangeToken的RegisterChangeCallback來達到發生變更的時候有回調通知。

RegisterChangeCallback 注冊一個回調,當變更發生時執行,一般配合ActiveChangeCallbacks來達成。

一個約束并不是強制

ActiveChangeCallbacks 為 true 時通過RegisterChangeCallback 注冊的回調會在發生變更時被回調執行,反之相反。

MS其它組件實現的IChangeToken

CancellationChangeToken (一個對CancellationToken的包裝)

CompositeChangeToken (組合ChangeToken,可以將多個ChangeToken包裝成一個Token)

ConfigurationReloadToken (配置重新加載Token,來自MS.Configuration組件)

PollingFileChangeToken (通過輪訓來監控文件變更)

PollingWildCardChangeToken (通過輪訓來監控文件變更,這個是支持通配符的)

……

緩存一個文件,并在文件變化時候更新緩存內容

.NET Core中MemoryCache怎么實現緩存過期

手動過期緩存

.NET Core中MemoryCache怎么實現緩存過期

ChangeToken的一次性

恩,妥妥的輸出 1 1 2 2?

.NET Core中MemoryCache怎么實現緩存過期

實際輸出結果 1 1 2 3

為什么?

因為我們之前講到ChangeToken是通過HasChanged來判斷緩存是否過期的。

在這邊我們調用了cts的Cancel,那么無論如何HasChanged后續都會是true,因為cts的Cancel是不可逆的。

正確的做法

.NET Core中MemoryCache怎么實現緩存過期

這邊正確的做法只是強調,ChangeToken是一次性的,具體如何達到這個目的大家可以自由發揮。

自定義一個ChangeToken,當當前時間的分數為偶數時候過期

.NET Core中MemoryCache怎么實現緩存過期

.NET Core中MemoryCache怎么實現緩存過期

過期策略組合拳

上面介紹了MSCache中的過期策略,但都是單獨使用的,其實這些過期策略可以混合使用。

比如指定 1個小時后到期或者10分鐘內沒有命中到期。

.NET Core中MemoryCache怎么實現緩存過期

IChangeToken當然也是可以的。

這邊的過期策略是只要啟動一個條件達成那么這個緩存就是無效的。

緩存過期回調

很多時候我們希望緩存過期之后能做一些事情,比如重新寫入緩存等等,MSCache提供了這樣的機制。

使用回調相關的定義

.NET Core中MemoryCache怎么實現緩存過期

.NET Core中MemoryCache怎么實現緩存過期

.NET Core中MemoryCache怎么實現緩存過期

示例

.NET Core中MemoryCache怎么實現緩存過期

寫在最后

.NET Core中MemoryCache怎么實現緩存過期

關于.NET Core中MemoryCache怎么實現緩存過期就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

睢宁县| 龙里县| 海兴县| 巴彦县| 安吉县| 乌拉特前旗| 巴彦淖尔市| 昔阳县| 大理市| 余庆县| 牡丹江市| 宝山区| 南溪县| 岳普湖县| 濉溪县| 南安市| 鄱阳县| 靖西县| 扶绥县| 阳春市| 阳谷县| 荣成市| 泗洪县| 邵武市| 土默特右旗| 开封市| 奈曼旗| 乌鲁木齐县| 泽库县| 丹江口市| 永修县| 广宗县| 江油市| 萍乡市| 耿马| 津市市| 称多县| 鄄城县| 楚雄市| 木里| 桐乡市|