public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
}
public class MemoryCacheHelper
{
public static readonly IMemoryCache memoryCache = new MemoryCache(new MemoryCacheOptions
{
});
public static IMemoryCache Cache
{
get
{
return memoryCache;
}
}
/// <summary>
/// 删除所有缓存
/// </summary>
public static void RemoveCacheAll()
{
var keys = GetCacheKeys();
foreach (var key in keys)
{
Cache.Remove(key);
}
}
/// <summary>
/// 获取所有缓存键
/// </summary>
/// <returns></returns>
public static List<string> GetCacheKeys()
{
const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
var entries = Cache.GetType().GetField("_entries", flags).GetValue(Cache);
var cacheItems = entries as IDictionary;
var keys = new List<string>();
if (cacheItems == null) return keys;
foreach (DictionaryEntry cacheItem in cacheItems)
{
keys.Add(cacheItem.Key.ToString());
}
return keys;
}
/// <summary>
/// 设置缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="cacheKey"></param>
/// <param name="t"></param>
/// <param name="expire">缓存秒数</param>
/// <returns></returns>
public static bool SetCache<T>(string cacheKey, T t, int expire)
{
try
{
var cacheEntryOptions = new MemoryCacheEntryOptions();
// Keep in cache for this time, reset time if accessed.
cacheEntryOptions.SetSlidingExpiration(TimeSpan.FromSeconds(expire));
//绝对过期
cacheEntryOptions.AbsoluteExpirationRelativeToNow=TimeSpan.FromSeconds(expire);
Cache.Set(cacheKey, t, cacheEntryOptions);
return true;
}
catch (Exception ex)
{
Console.WriteLine("MemoryCache设置缓存异常:" + ex.Message);
return false;
}
}
/// <summary>
/// 获取缓存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="cacheKey"></param>
/// <returns></returns>
public static T GetCache<T>(string cacheKey)
{
try
{
object cacheEntry = null;
Cache.TryGetValue(cacheKey, out cacheEntry);
return (T)cacheEntry;
}
catch (Exception ex)
{
Console.WriteLine("MemoryCache获取缓存异常:" + ex.Message);
return default(T);
}
}
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="cacheKey"></param>
/// <returns></returns>
public static bool RemoveCache(string cacheKey)
{
try
{
Cache.Remove(cacheKey);
return true;
}
catch (Exception ex)
{
Console.WriteLine("MemoryCache删除缓存异常:" + ex.Message);
return false;
}
}
}
参考:ASP.NET Core 中的内存中缓存 | Microsoft Docs
使用示例:
需引用包: Microsoft.Extensions.Caching.Abstractions
命名空间:using Microsoft.Extensions.Caching.Memory;
MemoryCacheHelper.Cache.Remove("key");
MemoryCacheHelper.Cache.Set("key", 123);