using Microsoft.Extensions.Caching.Memory; namespace YLErp.Providers { /// /// MemoryCacheProvider /// public class MemoryCacheProvider : YLErp.Abstract.ICacheProvider { readonly MemoryCache _cache; public MemoryCacheProvider() { _cache = new MemoryCache(new MemoryCacheOptions()); } public void FlushAll() { lock (_cache) { _cache.Compact(1); _cache.Compact(1); } } /// /// 检索指定的项 /// public object Get(string key) { return _cache.Get(key); } /// /// 检索指定的项 /// public T Get(string key) { var obj = _cache.Get(key); if (obj != null) { return (T)obj; } return default; } /// /// 设置缓存对象 /// /// 用于引用该对象的缓存密钥 /// 要插入缓存中的对象 /// 从该处插入的对象过期并从缓存中删除的时间 public void Set(string key, object value, DateTimeOffset absoluteExpiration) { _cache.Set(key, value, absoluteExpiration); } /// /// 设置缓存对象 /// /// 用于引用该对象的缓存密钥 /// 要插入缓存中的对象 /// /// 对象的到期时间和上次访问所插入的对象的时间之间的间隔。 如果此值为 20 分钟的等效项,该对象会过期,可从缓存中删除上次访问后的 20 分钟。 /// public void Set(string key, object value, TimeSpan absoluteExpirationRelativeToNow) { _cache.Set(key, value, absoluteExpirationRelativeToNow); } /// /// 设置缓存对象 /// /// 用于引用该对象的缓存密钥 /// 要插入缓存中的对象 /// /// 对象的到期时间和上次访问所插入的对象的时间之间的间隔。 如果此值为 20 分钟的等效项,该对象会过期,可从缓存中删除上次访问后的 20 分钟。 /// public void SetWithSlidingExpiration(string key, object value, TimeSpan slidingExpiration) { _cache.Set(key, value, new MemoryCacheEntryOptions { SlidingExpiration = slidingExpiration }); } /// /// 删除指定的项 /// public void Remove(string key) { _cache.Remove(key); } public static readonly MemoryCacheProvider Default; static MemoryCacheProvider() { Default = new MemoryCacheProvider(); } } }