first commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace JSMachine.WMS.Common.Cache
|
||||
{
|
||||
/// <summary>
|
||||
/// 全局内存缓存(需要注意在程序退出时持久化内存数据)
|
||||
/// 什么时候会进行过期缓存清理?特别注意:缓存清理并不会主动进行,即使设置了过期策略也必须在以下几种情况下才清理过期项
|
||||
/// </summary>
|
||||
public class GlobalMemoryCache
|
||||
{
|
||||
/// <summary>
|
||||
/// 内存缓存
|
||||
/// </summary>
|
||||
private static IMemoryCache MemoryCache = new MemoryCache(Options.Create(new MemoryCacheOptions()
|
||||
{
|
||||
ExpirationScanFrequency = TimeSpan.FromSeconds(10)
|
||||
}));
|
||||
|
||||
//默认缓存项缓存过期设置可以绝对过期和滑动过期同时设置,两个条件满足一个即视为当前缓存项过期
|
||||
//private static MemoryCacheEntryOptions DefaultCachOption = new()
|
||||
//{
|
||||
// //设置绝对过期时间为10分钟(10分钟后缓存项会移除)
|
||||
// AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30),
|
||||
// //容量为一份大小
|
||||
// Size = 1,
|
||||
// //设置滑动过期时间为10分钟(两分钟内缓存项未被访问则移除该缓存项)
|
||||
// SlidingExpiration = TimeSpan.FromMinutes(10)
|
||||
//};
|
||||
|
||||
/// <summary>
|
||||
/// 增加缓存
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey"></typeparam>
|
||||
/// <typeparam name="TValue"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="memoryCacheEntry"></param>
|
||||
public static void AddCach<TKey, TValue>(TKey key, TValue value, MemoryCacheEntryOptions memoryCacheEntry = null)
|
||||
{
|
||||
//不传递缓存选项则永不过期
|
||||
if (memoryCacheEntry == null)
|
||||
MemoryCache.Set(key, value);
|
||||
else
|
||||
MemoryCache.Set(key, value, memoryCacheEntry);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓存项
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey"></typeparam>
|
||||
/// <typeparam name="TValue"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
public static TValue GetCach<TKey, TValue>(TKey key)
|
||||
{
|
||||
return MemoryCache.Get<TValue>(key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除缓存项
|
||||
/// </summary>
|
||||
/// <typeparam name="TKey"></typeparam>
|
||||
/// <param name="key"></param>
|
||||
public static void RemoveCach<TKey>(TKey key)
|
||||
{
|
||||
MemoryCache.Remove(key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 激活缓存,以便让过期项被及时检测并触发超时移除事件
|
||||
/// 微软限制,当不访问缓存的时候过期策略失效
|
||||
/// 仅在需要的项目中调用此方法,以免不必要的性能消耗
|
||||
/// 什么时候会进行过期缓存清理?特别注意:缓存清理并不会主动进行,即使设置了过期策略也必须在以下几种情况下才清理过期项
|
||||
/// 添加新的
|
||||
/// 获取缓存项
|
||||
/// 删除缓存项目
|
||||
/// </summary>
|
||||
public static void ActicateCach()
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
Thread.Sleep(2000);
|
||||
MemoryCache.Get("AAA");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user