.NET Core 2.0遷移小技巧之MemoryCache問題修復解決的方法
前言
大家應該都知道,對于傳統(tǒng)的.NET Framework項目而言,System.Runtime.Caching命名空間是常用的工具了,其中MemoryCache類則常被用于實現(xiàn)內存緩存。
.NET Core 2.0暫時還不支持System.Runtime.Caching dll,這也就意味著MemoryCache相關代碼不再起作用了。
但是好消息是,我們可以使用.NET Core 2.0的新API實現(xiàn)內存緩存功能,簡單修改代碼,解決不兼容問題。下面話不多說了,來一起看看詳細的介紹吧。
解決方案
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>
/// 添加緩存內容
/// </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類,以及全新的內存緩存API
using Microsoft.Extensions.Caching.Memory;
3.改寫代碼,使用新的API實現(xiàn)內存緩存功能
初始化緩存對象方式改寫前:
static ObjectCache cache = MemoryCache.Default;
初始化緩存對象方式改寫后:
static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
讀取內存緩存值方式變化:
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);
}
}
設定內存緩存內容方式變化:
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)
});
}
}
結論
在使用了Microsoft.Extensions.Caching.Memory下的新API改寫了舊代碼后,你會發(fā)現(xiàn)原有的各種內存緩存超時策略全都是有對應新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>
/// 添加緩存內容
/// </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)
});
}
}
}
}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
ASP.NET?MVC實現(xiàn)區(qū)域或城市選擇
這篇文章介紹了ASP.NET?MVC實現(xiàn)區(qū)域或城市選擇的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
asp.net ext treepanel 動態(tài)加載XML的實現(xiàn)方法
當你在asp.net下面 使用Ext TreePanel直接加載服務器上XML文件會出現(xiàn)樹不能顯示,樹據(jù)不能正確加載的問題。2008-10-10
asp.net Linq To Xml上手Descendants、Elements遍歷節(jié)點
C#3.0 Vs2008 RTM 本文介紹如何使用 Descendants、Elements快速遍歷XML節(jié)點2009-07-07
ASP.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)短信服務可增強應用的消息通知能力,本文介紹了使用RabbitMQ發(fā)送短信的步驟,包括安裝RabbitMQ客戶端庫、創(chuàng)建連接和通道、實現(xiàn)短信發(fā)送服務、配置RabbitMQ消費者,并集成到用戶密碼重置流程中,通過示例代碼,可以快速理解整個實現(xiàn)過程2024-09-09
.NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析
這篇文章主要介紹了.NET醫(yī)院公眾號系統(tǒng) 線程CPU雙高分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04

