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

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

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:23KAnts ASP.NET教程

這篇文章主要介紹了.NET Core系列之MemoryCache 緩存選項,詳細的介紹一下 MSCache 中的 Options,由此來介紹一些 MSCache 中的內部機制,感興趣的小伙伴們可以參考一下

在上一篇 ”擁抱.NET Core系列:MemoryCache 緩存過期” 中我們詳細的了解了緩存過期相關的內容,今天我們來介紹一下 MSCache 中的 Options,由此來介紹一些 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

MemoryCacheOptions

 

.NET Core系列之MemoryCache 緩存選項

Clock 顧名思義,是用來提供時間的一個成員,緩存里面大量用到了時間來判斷緩存是否過期。

CompactOnMemoryPressure 已經被廢棄,可以不用管

ExpirationScanFrequency 過期掃描頻率(默認為1分鐘,可以理解為每過多久移除一次過期的緩存項)

SizeLimit 緩存大小限制(這屬于一個說明性屬性,而且單位也不是緩存數目,而是緩存真正占用的空間大小)

CompactionPercentage 壓縮率(默認0.05,百分比)

Clock

初次見到的時候以為是用來自定義 LocalTime,其實不是(當然要這么做也可以),在 MSCache 中只允許用 Utc 時間,但是為什么既然都是 Utc 時間還要留這個擴展選項呢?

很簡單,默認的當前時間是當前系統的當前時間,在一些對時間精度要求比較高的情況下就可以重寫 Clock 來實現自己自定義的獲取當前時間的邏輯。

ExpirationScanFrequency

 

緩存無非是一個字典表,當一些緩存項過期失效時候我們需要移除字典表里面的內容。

然而準確的做到每個緩沖項過期就進行移除是非常損失性能的(類似GC),所以 MSCache 提供了一個屬性來設置,沒間隔多久才進行一次過期緩存移除。

這個值默認為1分鐘。

什么時候會進行過期緩存清理?

  • 添加新的
  • 獲取緩存項
  • 刪除緩存項目
  • 當有緩存項過期(通過過期回調)

這邊就解釋了上一節的最后為什么沒有回調輸出。

因為MSCache里面沒有使用定時器來進行過期掃描。

ps:緩存過期清理是一個異步方法也就是不會堵塞當前線程。

SizeLimit

 

這個屬性在 MemoryCache 中幾乎沒有用,在 MemoryCache 中關于緩存項的大小默認都是null或0。

因為這個屬性并不是緩存項的數量,而是緩存真正占用的空間大小,如這個緩存項占用了多少內存。

然而在.NET中計算一個對象所占用的內存是很難且損耗性能的,所以在 MemoryCache 中這個屬性幾乎可以看做沒有。

當然你可以通過手動設置緩存項的Size來啟用相關功能。這邊我們只簡單說明,詳細講解會在后面的分布式緩存中進行說明。

這個屬性的作用是:當所有緩存大小超過這個值的時候進行一次緩存壓縮。

CompactionPercentage

 

當內存大小超過 SizeLimit 時候進行壓縮的比率,默認值是0.05,也就是百分之5。

具體的計算方式是

得到剩余的緩存大小 SizeLimit * 1 – CompactionPercentage

得到需要壓縮的大小 CurrentSize – (SizeLimit * 1 – CompactionPercentage)

緩存的清理優先級

.NET Core系列之MemoryCache 緩存選項

這時候就牽扯到 CacheEntry 中的 Priority 屬性了,當發生這種情況的時候 MSCache 會按以下優先級進行壓縮處理

  • Low
  • Normal
  • High

為什么沒有 NeverRemove ?因為 NeverRemove 永遠不會在超過 SizeLimt 時候進行清理。

那么當緩存大小超過SizeLimit時,MSCache會

先清理Low優先級的緩存項(不管是否過期)

再清理Normal優先級的緩存項(不管是否過期)

繼續清理High優先級的緩存項(不管是否過期)

CacheEntry 默認的 優先級為:Normal。

寫在最后

 

今天介紹了一些 MSCache 的內部機制,后續會講一下 緩存域 和 一些小技巧。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 暖暖在线精品日本中文 | 91精品国产高清久久久久久 | 大学生按摩黄a级中文片 | 小兰被扒开内裤露出p | 奇米网在线 | 1024毛片 | 91麻豆精品国产自产在线观看 | 欧美日韩视频在线一区二区 | 国产一区二区在线看 | 2019年国产高清情侣视频 | 久久re视频这里精品一本到99 | 欧美一区二区三区gg高清影视 | 九九热这里只有精品2 | 美女露奶奶 | 国产一级视频在线观看 | 99精品观看 | 久草热在线| 羞羞答答影院在线 | 闺蜜调教我做她的脚奴 | 好大好爽好舒服视频 | 91男人| 国产成人盗拍精品免费视频 | 成年人视频在线免费观看 | 91麻豆在线观看 | 国内精品露脸在线视频播放 | 天天综合色网 | 日韩免费视频播放 | 亚洲欧美天堂综合久久 | 国产90后美女露脸在线观看 | 久久天天综合 | 青青在线国产视频 | 亚洲精品片 | xx顶级欧美熟妞xxhd | 好大水好多好爽好硬好深视频 | 911爱豆传媒国产 | 成人黄色a级片 | 亚洲四虎永久在线播放 | 精品久久香蕉国产线看观看麻豆 | 粉嫩尤物在线456 | 免费成年人在线视频 | 免费一级黄 |