国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品一区二区在线看 | 国产成人免费在线 | 国产一区在线视频 | 午夜网址 | 不卡的一区二区 | 中文字幕av在线 | 五月天婷婷在线视频 | 亚洲第1页 | 日本中文在线视频 | 毛片免费在线 | 久久免费精品 | 狠狠操av| 欧美a在线 | 精品一区二区三区免费毛片爱 | 亚洲国产日韩欧美在线 | 色图自拍偷拍 | 久久精品视频网站 | 久久最新 | 日本久久久久久 | 日韩精品 | 亚洲天堂中文字幕在线观看 | av在线资源网 | 亚洲 欧美 日韩在线 | 亚洲自拍偷拍网 | www.中文字幕.com | www久久九| 亚洲性人人天天夜夜摸 | 久久爱电影 | 久久久久国产精品免费免费搜索 | 日本一区二区中文字幕 | 日韩av电影在线免费观看 | 亚洲精品二区 | 欧美午夜精品久久久久久蜜 | 精品久久久久久亚洲精品 | 国产一区二区精品在线观看 | 国产精品1区2区 | 欧美一区二区在线观看 | 中文字幕视频在线 | 亚洲精品成人 | 91免费观看 | 中文字幕欧美日韩 |