.NetCore?MemoryCache使用詳解
引用類庫(kù)
1.Install-Package Microsoft.Extensions.Caching.Memory
MemoryCacheOptions 緩存配置
1.ExpirationScanFrequency獲取或設(shè)置對(duì)過(guò)期項(xiàng)的連續(xù)掃描之間的最短時(shí)間間隔
2.SizeLimit 緩存是沒有大小的的,此值設(shè)置緩存的份數(shù)
3.CompactionPercentage獲取或設(shè)置在超過(guò)最大大小時(shí)壓縮緩存的數(shù)量,優(yōu)先壓縮優(yōu)先級(jí)較低的緩存,0.2代表20%
services.AddMemoryCache(options => {
// 緩存最大為100份
//##注意netcore中的緩存是沒有單位的,緩存項(xiàng)和緩存的相對(duì)關(guān)系
options.SizeLimit = 2;
//緩存滿了時(shí)候壓縮20%的優(yōu)先級(jí)較低的數(shù)據(jù)
options.CompactionPercentage = 0.2;
//兩秒鐘查找一次過(guò)期項(xiàng)
options.ExpirationScanFrequency = TimeSpan.FromSeconds(2);
});MemoryCacheEntryOptions 單個(gè)緩存項(xiàng)配置
1.AbsoluteExpiration 絕對(duì)過(guò)期時(shí)間
2.AbsoluteExpirationRelativeToNow 相對(duì)于現(xiàn)在的絕對(duì)過(guò)期時(shí)間
3.SlidingExpiration 滑動(dòng)過(guò)期時(shí)間,在時(shí)間段范圍內(nèi) 緩存被再次訪問,過(guò)期時(shí)間將會(huì)被重置
4.Priority 優(yōu)先級(jí)
5.Size 緩存份數(shù)
public bool Add(string key, object value, int ExpirtionTime = 20)
{
if (!string.IsNullOrEmpty(key))
{
MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
{
//滑動(dòng)過(guò)期時(shí)間 20秒沒有訪問則清除
SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
//設(shè)置份數(shù)
Size = 1,
//優(yōu)先級(jí)
Priority = CacheItemPriority.Low,
};
//過(guò)期回掉
cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
{
Console.WriteLine($"回調(diào)函數(shù)輸出【鍵:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
});
_cache.Set(key, value, cacheEntityOps);
}
return true;
}完整代碼
1.接口
public interface ICacheService
{
/// <summary>
/// 新增
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="ExpirtionTime"></param>
/// <returns></returns>
bool Add(string key, object value, int ExpirtionTime = 20);
/// <summary>
/// 獲取
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
string GetValue(string key);
/// <summary>
/// 驗(yàn)證緩存項(xiàng)是否存在
/// </summary>
/// <param name="key">緩存Key</param>
/// <returns></returns>
bool Exists(string key);
/// <summary>
/// 移除
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
bool Remove(string key);
}2. 實(shí)現(xiàn)ICacheService
/// <summary>
/// 緩存接口實(shí)現(xiàn)
/// </summary>
public class MemoryCacheService : ICacheService
{
protected IMemoryCache _cache;
public MemoryCacheService(IMemoryCache cache)
{
_cache = cache;
}
public bool Add(string key, object value, int ExpirtionTime = 20)
{
if (!string.IsNullOrEmpty(key))
{
MemoryCacheEntryOptions cacheEntityOps = new MemoryCacheEntryOptions()
{
//滑動(dòng)過(guò)期時(shí)間 20秒沒有訪問則清除
SlidingExpiration = TimeSpan.FromSeconds(ExpirtionTime),
//設(shè)置份數(shù)
Size = 1,
//優(yōu)先級(jí)
Priority = CacheItemPriority.Low,
};
//過(guò)期回掉
cacheEntityOps.RegisterPostEvictionCallback((keyInfo, valueInfo, reason, state) =>
{
Console.WriteLine($"回調(diào)函數(shù)輸出【鍵:{keyInfo},值:{valueInfo},被清除的原因:{reason}】");
});
_cache.Set(key, value, cacheEntityOps);
}
return true;
}
public bool Remove(string key)
{
if (string.IsNullOrEmpty(key))
{
return false;
}
if (Exists(key))
{
_cache.Remove(key);
return true;
}
return false;
}
public string GetValue(string key)
{
if (string.IsNullOrEmpty(key))
{
return null;
}
if (Exists(key))
{
return _cache.Get(key).ToString();
}
return null;
}
public bool Exists(string key)
{
if (string.IsNullOrEmpty(key))
{
return false;
}
object cache;
return _cache.TryGetValue(key, out cache);
}
}大神貼1:http://www.dbjr.com.cn/article/195870.htm
大神貼2:http://www.dbjr.com.cn/article/252078.htm
到此這篇關(guān)于.NetCore MemoryCache使用的文章就介紹到這了,更多相關(guān).NetCore MemoryCache使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET MVC+EF在服務(wù)端分頁(yè)使用jqGrid以及jquery Datatables的注意事項(xiàng)
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC+EF在服務(wù)端分頁(yè)使用jqGrid以及jquery Datatables的注意事項(xiàng),感興趣的小伙伴們可以參考一下2016-06-06
.NET 6開發(fā)TodoList應(yīng)用實(shí)現(xiàn)結(jié)構(gòu)搭建
這篇文章主要介紹了.NET 6開發(fā)TodoList應(yīng)用實(shí)現(xiàn)結(jié)構(gòu)搭建,上一篇我們講解了實(shí)現(xiàn)系列背景 ,今天繼續(xù)來(lái)講講.NET 6開發(fā)TodoList并且實(shí)現(xiàn)結(jié)構(gòu)搭建,更多詳細(xì)內(nèi)容剛興趣得小伙伴可以來(lái)參考一下下面文章得具體內(nèi)容2021-12-12
.NET Core 1.0創(chuàng)建Self-Contained控制臺(tái)應(yīng)用
這篇文章主要為大家詳細(xì)介紹了.NET Core 1.0創(chuàng)建Self-Contained控制臺(tái)應(yīng)用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
ubuntu16.4下用jexus部署ASP.NET Core環(huán)境
這篇文章主要以圖文結(jié)合的方式介紹了ubuntu16.4下ASP.NET Core部署環(huán)境搭建步驟,感興趣的小伙伴們可以參考一下2016-07-07
2個(gè)頁(yè)面間不通過(guò)Session與url的傳值方式
2個(gè)頁(yè)面間不通過(guò)Session與url的傳值方式...2006-09-09

