一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .NET Core系列之MemoryCache 緩存過期

.NET Core系列之MemoryCache 緩存過期

2020-06-01 14:20KAnts ASP.NET教程

這篇文章主要介紹了.NET Core系列之MemoryCache 緩存過期,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在上一篇”擁抱.NET Core系列:MemoryCache 初識”中我們基本了解了緩存的添加、刪除、獲取,那么今天我們來看看緩存的過期機制。這里和上篇一樣將把“Microsoft.Extensions.Caching.Memory”簡稱為MSCache。

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 緩存過期

大家思考一下這段代碼為什么會沒有回調輸出?

本篇主要講了MSCache中緩存過期的幾種使用方式和擴展方式。下一篇會介紹下MSCache中的一些運行機制,比如上面的代碼為何沒有輸出?如何清除一組緩存等等。希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/ants/p/8482227.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲热在线视频 | 激情三级做爰在线观看激情 | 幻女free性zoz0交 | 亚洲卡一卡2卡三卡4麻豆 | 苍井空色欲迷墙 | 国产精品日韩欧美一区二区三区 | 亚洲欧美综合区自拍另类 | 亚洲可乐操| 亚洲黄色小视频 | 欧美整片在线 | 亚洲欧洲综合 | 日老逼| 五月婷婷丁香在线视频 | 日本在线播放视频 | 日韩视频在线免费 | 俄罗斯伦理片 | 从后面撕开老师的丝袜动态图 | 不卡视频一区二区 | 国产天天在线 | www免费看 | 亚洲国产成人久久午夜 | 校园全肉高h湿一女多男 | 四虎影院在线免费播放 | 99re这里只有精品在线观看 | 猫咪社区在线播放 | 国产精品片 | 99久久免费看精品国产一区 | 亚洲欧美一区二区三区不卡 | 日本精a在线观看 | 色综合久久丁香婷婷 | 色琪琪原网站亚洲香蕉 | 国产精品香蕉在线观看不卡 | 99在线观看视频免费 | 国产一区二区三区久久精品小说 | 特级淫片大乳女子高清视频 | 久99视频精品免费观看福利 | boobsmilking流奶水野战 | 国产综合亚洲欧美日韩一区二区 | 放荡的女老板bd中文字幕 | 免费老外的毛片清高 | 亚洲精品中文字幕第一区 |