.NET Core 2.0遷移小技巧之MemoryCache問題修復解決的方法
前言
大家應(yīng)該都知道,對于傳統(tǒng)的.NET Framework項目而言,System.Runtime.Caching
命名空間是常用的工具了,其中MemoryCache類則常被用于實現(xiàn)內(nèi)存緩存。
.NET Core 2.0暫時還不支持System.Runtime.Caching dll,這也就意味著MemoryCache相關(guān)代碼不再起作用了。
但是好消息是,我們可以使用.NET Core 2.0的新API實現(xiàn)內(nèi)存緩存功能,簡單修改代碼,解決不兼容問題。下面話不多說了,來一起看看詳細的介紹吧。
解決方案
1.將舊代碼導入項目中,如下:
using System; using System.Runtime.Caching; namespace TestWebApp.Service { public class MemoryCacheService { static ObjectCache cache = MemoryCache.Default; /// <summary> /// 獲取緩存值 /// </summary> /// <param name="key"></param> /// <returns></returns> private object GetCacheValue(string key) { if (key != null && cache.Contains(key)) { return cache[key]; } return default(object); } /// <summary> /// 添加緩存內(nèi)容 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetChacheValue(string key, object value) { if (key != null) { CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = TimeSpan.FromHours(1) }; cache.Set(key, value, policy); } } } }
導入后你會發(fā)現(xiàn)VS會提示無法找到System.Runtime.Caching
命名空間,原有的代碼無法直接編譯使用。
2.添加對Microsoft.Extensions.Caching.Memory
命名空間的引用,它提供了.NET Core默認實現(xiàn)的MemoryCache類,以及全新的內(nèi)存緩存API
using Microsoft.Extensions.Caching.Memory;
3.改寫代碼,使用新的API實現(xiàn)內(nèi)存緩存功能
初始化緩存對象方式改寫前:
static ObjectCache cache = MemoryCache.Default;
初始化緩存對象方式改寫后:
static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
讀取內(nèi)存緩存值方式變化:
private object GetCacheValue(string key) { if (key != null && cache.Contains(key)) { return cache[key]; } return default(object); }
改寫后:
private object GetCacheValue(string key) { object val = null; if (key != null && cache.TryGetValue(key, out val)) { return val; } else { return default(object); } }
設(shè)定內(nèi)存緩存內(nèi)容方式變化:
public static void SetChacheValue(string key, object value) { if (key != null) { CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = TimeSpan.FromHours(1) }; cache.Set(key, value, policy); } }
修改后:
public static void SetChacheValue(string key, object value) { if (key != null) { cache.Set(key, value, new MemoryCacheEntryOptions { SlidingExpiration = TimeSpan.FromHours(1) }); } }
結(jié)論
在使用了Microsoft.Extensions.Caching.Memory
下的新API改寫了舊代碼后,你會發(fā)現(xiàn)原有的各種內(nèi)存緩存超時策略全都是有對應(yīng)新API的,包括AbsoluteExpiration, SlidingExpiration等等。
所以我們還是可以很輕松的使用.NET Core新API簡單改動下下就能重用現(xiàn)有絕大部分舊代碼,將其遷移過來繼續(xù)起作用。
遷移后的完整代碼如下:
using Microsoft.Extensions.Caching.Memory; using System; namespace TestMemoryCacheWebApp.Services { public class MemoryCacheService { static MemoryCache cache = new MemoryCache(new MemoryCacheOptions()); /// <summary> /// 獲取緩存值 /// </summary> /// <param name="key"></param> /// <returns></returns> private object GetCacheValue(string key) { object val = null; if (key != null && cache.TryGetValue(key, out val)) { return val; } else { return default(object); } } /// <summary> /// 添加緩存內(nèi)容 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetChacheValue(string key, object value) { if (key != null) { cache.Set(key, value, new MemoryCacheEntryOptions { SlidingExpiration = TimeSpan.FromHours(1) }); } } } }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
ASP.NET?MVC實現(xiàn)區(qū)域或城市選擇
這篇文章介紹了ASP.NET?MVC實現(xiàn)區(qū)域或城市選擇的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08asp.net ext treepanel 動態(tài)加載XML的實現(xiàn)方法
當你在asp.net下面 使用Ext TreePanel直接加載服務(wù)器上XML文件會出現(xiàn)樹不能顯示,樹據(jù)不能正確加載的問題。2008-10-10asp.net Linq To Xml上手Descendants、Elements遍歷節(jié)點
C#3.0 Vs2008 RTM 本文介紹如何使用 Descendants、Elements快速遍歷XML節(jié)點2009-07-07ASP.NET Core3.x API版本控制的實現(xiàn)
這篇文章主要介紹了ASP.NET Core3.x API版本控制的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06.Net使用RabbitMQ實現(xiàn)短信密碼重置的操作步驟
在C#開發(fā)中,通過RabbitMQ實現(xiàn)短信服務(wù)可增強應(yīng)用的消息通知能力,本文介紹了使用RabbitMQ發(fā)送短信的步驟,包括安裝RabbitMQ客戶端庫、創(chuàng)建連接和通道、實現(xiàn)短信發(fā)送服務(wù)、配置RabbitMQ消費者,并集成到用戶密碼重置流程中,通過示例代碼,可以快速理解整個實現(xiàn)過程2024-09-09.NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析
這篇文章主要介紹了.NET醫(yī)院公眾號系統(tǒng) 線程CPU雙高分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04