Memory
Microsoft.Extensions.Caching.Memory是一个基于内存的缓存库,它是.NET Core的一部分,并且可以在.NET Core应用程序中使用。在本文中,我们将深入了解Microsoft.Extensions.Caching.Memory的主要功能和用法。
# 安装
在使用Microsoft.Extensions.Caching.Memory之前,需要先安装它。可以使用NuGet包管理器或者.NET CLI进行安装。
# 使用NuGet进行安装
打开NuGet包管理器控制台,运行以下命令:
Install-Package Microsoft.Extensions.Caching.Memory
# 使用.NET CLI进行安装
打开终端,进入项目文件夹,运行以下命令:
dotnet add package Microsoft.Extensions.Caching.Memory
# 使用Microsoft.Extensions.Caching.Memory
# 注册服务
在使用Microsoft.Extensions.Caching.Memory之前,需要在应用程序中注册服务。可以使用以下代码在Startup.cs文件中注册:
services.AddMemoryCache();
# 基本用法
在注册完服务之后,可以使用以下代码获取IMemoryCache接口的实例:
var cache = serviceProvider.GetService<IMemoryCache>();
然后可以使用以下代码将对象添加到缓存中:
cache.Set("key", "value");
可以使用以下代码从缓存中获取对象:
var value = cache.Get("key");
如果缓存中不存在指定的键,则Get方法将返回null。
可以使用以下代码从缓存中删除对象:
cache.Remove("key");
# 获取cache方法:GetOrCreate或者TryGetValue
这2个方法,都可以在获取数据的同时进行进行判断,如果cache不存在同时进行添加
//GetOrCreate第一个参数是cache名称,第2个参数是Func委托,当cache不存在时就会运行创建
string val1 = memoryCache.GetOrCreate<string>("my1", entry =>
{
// 把cache的数据计算出来
string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
// 设置cache时间
entry.SlidingExpiration = TimeSpan.FromSeconds(20);
return data;
});
if (val1 != null)
{
}
string cachename = "tbdata";
List<WeatherForecast> tb = null;
//TryGetValue方法返回true就是取到值,返回false就会调用if括号中的代码去创建cache并且返回值
if ( !memoryCache.TryGetValue( cachename , out tb ) )
{
tb = MakeChildTable(); //计算出cache的值
//设置过期cache时间
var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration( TimeSpan.FromSeconds( 20 ) );
// cache加入
memoryCache.Set( cachename , tb , cacheEntryOptions );
}
if ( tb != null )
{
}
# 缓存项的过期和移除
可以使用以下代码将带有过期时间的对象添加到缓存中:
var options = new MemoryCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10)
};
cache.Set("key", "value", options);
可以使用以下代码在缓存项到达过期时间时触发回调:
options.RegisterPostEvictionCallback((key, value, reason, state) =>
{
Console.WriteLine($"key:{key}, value:{value}, reason:{reason}");
});
可以使用以下代码从缓存中移除缓存项:
cache.Remove("key");
# 缓存项的优先级
可以使用以下代码为缓存项设置优先级:
var options = new MemoryCacheEntryOptions
{
Priority = CacheItemPriority.High
};
cache.Set("key", "value", options);
# 缓存项的滑动过期
可以使用以下代码将带有滑动过期时间的对象添加到缓存中:
var options = new MemoryCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromMinutes(10)
};
cache.Set("key", "value", options);
# 缓存项的绝对过期
可以使用以下代码将带有绝对过期时间的对象添加到缓存中:
var options = new MemoryCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(10)
};
cache.Set("key", "value", options);
# 缓存项的优化
可以使用以下代码为缓存项设置优化参数:
var options = new MemoryCacheEntryOptions
{
Size = 1024,
ExpirationTokens = new List<IChangeToken> { token },
PostEvictionCallbacks =
{
new PostEvictionCallbackRegistration
{
EvictionCallback = (key, value, reason, state) =>
{
Console.WriteLine($"key:{key}, value:{value}, reason:{reason}");
}
}
}
};
cache.Set("key", "value", options);
其中,Size属性表示缓存项的大小,ExpirationTokens属性表示缓存项的过期令牌列表,PostEvictionCallbacks属性表示缓存项在被移除后要执行的回调。
# 缓存项的批量操作
可以使用以下代码批量添加、获取、删除缓存项:
var items = new Dictionary<string, object>
{
{ "key1", "value1" },
{ "key2", "value2" },
{ "key3", "value3" }
};
cache.SetAll(items);
var values = cache.GetMany(new[] { "key1", "key2", "key3" });
cache.RemoveAll(new[] { "key1", "key2", "key3" });
# 总结
本文介绍了Microsoft.Extensions.Caching.Memory的主要功能和用法,包括注册服务、基本用法、缓存项的过期和移除、缓存项的优先级、缓存项的滑动过期、缓存项的绝对过期、缓存项的优化和缓存项的批量操作。使用Microsoft.Extensions.Caching.Memory可以方便地在.NET Core应用程序中实现基于内存的缓存功能。