日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

如何在 ASP.Net Core 使用 内存缓存

發(fā)布時間:2023/12/4 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 ASP.Net Core 使用 内存缓存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ASP.NET Core 是一個輕量級,模塊化的框架,常用來在 Windows,Linux 和 MacOS 上構建高性能,現(xiàn)代化的web框架,不像過去的 Asp.NET,在 ASP.NET Core 中并沒有內(nèi)置 Cache 對象,不過你可以通過 nuget 上的擴展實現(xiàn)如下三種 cache:

  • in-memory caching

  • distributed caching

  • response caching

在本文中,我們來看看如何將那些不易變的數(shù)據(jù)灌到內(nèi)存中實現(xiàn) ASP.NET Core application 的高性能,然后我會用一些例子來說明這些概念。

如何啟用 in-memory cache

要想將 in-memory cache 集成到 ASP.NET Core 中,就需要將其注入到 ServiceCollection 容器,如下代碼所示:

public?void?ConfigureServices(IServiceCollection?services) {services.AddMvc();services.AddMemoryCache(); }

集成好之后,接下來了解一下緩存的統(tǒng)一接口:IMemoryCache ,代碼如下:

public?interface?IMemoryCache?:?IDisposable {bool?TryGetValue(object?key,?out?object?value);ICacheEntry?CreateEntry(object?key);void?Remove(object?key); }

那如何在 Controller 中使用呢?可以使用 Controller 的構造函數(shù)實現(xiàn)注入,如下代碼所示:

public?class?HomeController?:?Controller{private?readonly?ILogger<HomeController>?_logger;private?IMemoryCache?cache;public?HomeController(ILogger<HomeController>?logger,?IMemoryCache?cache){_logger?=?logger;}}

到現(xiàn)在為止,in-memory caching 的配置全部做完,現(xiàn)在可以考慮如何實現(xiàn)從 Cache 讀取和寫入了。

Cache的讀取和寫入

利用 IMemoryCache 接口的 Set<T>() 可實現(xiàn)向緩存中寫入數(shù)據(jù),請注意這個 Set<T>() 方法接收兩個參數(shù),第一個參數(shù)是緩存的名字,第二個參數(shù)就是你要緩存的內(nèi)容,如下代碼所示:

public?IActionResult?Index(){cache.Set("IDGKey",?DateTime.Now.ToString());return?View();}

從 Cache 中提取內(nèi)容,需要使用 IMemoryCache 接口的 TryGet() 方法,下面是對 Index 方法的一個修改版本,代碼如下:

public?IActionResult?Index(){string?key?=?"IDGKey";string?obj;if?(!cache.TryGetValue<string>(key,?out?obj)){obj?=?DateTime.Now.ToString();cache.Set<string>(key,?obj);}ViewBag.Cache?=?obj;return?View();}

還有一個叫做 GetOrCreate 方法,從名字上就能看出來,如果獲取不到就會創(chuàng)建一個,如下代碼所示:

public?IActionResult?Index(){cache.GetOrCreate<string>("IDGKey",?cacheEntry?=>{return?DateTime.Now.ToString();});return?View();}

對了,除了同步版本的 GetOrCreate,還有一個支持異步的 GetOrCreateAsync。

Cache 的過期策略

可以對緩存數(shù)據(jù)指定過期策略,比如說:絕對過期時間 和 滑動過期時間,前者表示緩存數(shù)據(jù)的絕對存活時間,時間一到就會立即移除,后者表示指定的時間間隔內(nèi)數(shù)據(jù)沒有被訪問到,那么就會被移除,如果不明白的化,參考 Session 的過期機制。

要想設置過期策略,可以通過 MemoryCacheEntryOptions 類來配置,如下代碼所示:

public?IActionResult?Index(){MemoryCacheEntryOptions?cacheExpirationOptions?=?new?MemoryCacheEntryOptions();cacheExpirationOptions.AbsoluteExpiration?=?DateTime.Now.AddMinutes(30);cacheExpirationOptions.Priority?=?CacheItemPriority.Normal;cache.Set<string>("IDGKey",?DateTime.Now.ToString(),?cacheExpirationOptions);return?View();}

值得注意的是上面的 Priority 屬性,它的應用場景是這樣的,當應用程序內(nèi)存不夠時要回收內(nèi)存的過程中,誰的優(yōu)先級低就會被優(yōu)先移除,除了Normal 枚舉,還有其他諸如:Low, High, NeverRemove ,除了 NeverRemove ,其他的幾種都會被回收機制管控。

新的 Cache 機制還提供了一個????????的方式,那就是 回調(diào)函數(shù) 注入,意味著當 cache 過期被移除時會自動觸發(fā)你指定的回調(diào)函數(shù),你可以在 回調(diào)函數(shù) 中做一些你自定義的業(yè)務邏輯,比如重新給 cache 注入值,如下代碼所示:

public?IActionResult?Index(){MemoryCacheEntryOptions?cacheExpirationOptions?=?new?MemoryCacheEntryOptions();cacheExpirationOptions.RegisterPostEvictionCallback((obj1,?obj2,?reason,?obj3)?=>{//callback},?this);cache.Set<string>("IDGKey",?DateTime.Now.ToString(),?cacheExpirationOptions);return?View();}

你甚至還可以配置兩個 cache 的依賴關系,舉個例子,如果某一個 cache item 被移除了,你希望它關聯(lián)的 cache 也要自動移除,看起來是不是很 nice,篇幅有限,我會在后面的文章中和大家闡述如何去實現(xiàn),如果你很想知道,可先參考微軟的MSDN:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-5.0

譯文鏈接:https://www.infoworld.com/article/3230129/how-to-use-in-memory-caching-in-aspnet-core.html?nsdr=true

總結

以上是生活随笔為你收集整理的如何在 ASP.Net Core 使用 内存缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。