IMemoryCache 使用
IMemoryCache 提供了一个内存中的缓存存储,允许你存储和检索对象,这些对象可以在应用程序的不同部分之间共享,以提高性能并减少重复计算或数据库访问的次数。
(图片来源网络,侵删)
public interface ICacheService : IDisposable { /// /// 验证缓存项是否存在 /// /// 缓存Key /// bool Exists(string key); /// /// List写入head /// /// /// void LPush(string key, string val); void RPush(string key, string val); /// /// List出队 lpop /// /// /// object ListDequeue(string key); /// /// List出队 lpop /// /// /// T ListDequeue(string key) where T : class; /// /// 移除list中的数据,keepIndex为保留的位置到最后一个元素如list 元素为1.2.3.....100 /// 需要移除前3个数,keepindex应该为4 /// /// /// void ListRemove(string key, int keepIndex); /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// 缓存时长 /// 是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) //new TimeSpan(0, 60, 0); /// bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false); bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false); /// /// 删除缓存 /// /// 缓存Key /// bool Remove(string key); /// /// 批量删除缓存 /// /// 缓存Key集合 /// void RemoveAll(IEnumerable keys); /// /// 获取缓存 /// /// 缓存Key /// T Get(string key) where T : class; /// /// 获取缓存 /// /// 缓存Key /// string Get(string key); }
实现:
public class MemoryCacheService : ICacheService { /// /// 。IMemoryCache 提供了一个内存中的缓存存储,允许你存储和检索对象,这些对象可以在应用程序的不同部分之间共享,以提高性能并减少重复计算或数据库访问的次数。 /// protected IMemoryCache _cache; public MemoryCacheService(IMemoryCache cache) { _cache = cache; } /// /// 验证缓存项是否存在 /// /// 缓存Key /// public bool Exists(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } return _cache.Get(key) != null; } /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// public bool Add(string key, object value) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } _cache.Set(key, value); return Exists(key); } public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false) { if (expireSeconds != -1) { _cache.Set(key, value, new MemoryCacheEntryOptions() .SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds)) ); } else { _cache.Set(key, value); } return true; } public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false) { return AddObject(key, value, expireSeconds, isSliding); } public void LPush(string key, string val) { } public void RPush(string key, string val) { } public T ListDequeue(string key) where T : class { return null; } public object ListDequeue(string key) { return null; } public void ListRemove(string key, int keepIndex) { } /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// 滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间) /// 绝对过期时长 /// public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte) { _cache.Set(key, value, new MemoryCacheEntryOptions() .SetSlidingExpiration(expiresSliding) .SetAbsoluteExpiration(expiressAbsoulte) ); return Exists(key); } /// /// 添加缓存 /// /// 缓存Key /// 缓存Value /// 缓存时长 /// 是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) /// public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false) { if (isSliding) _cache.Set(key, value, new MemoryCacheEntryOptions() .SetSlidingExpiration(expiresIn) ); else _cache.Set(key, value, new MemoryCacheEntryOptions() .SetAbsoluteExpiration(expiresIn) ); return Exists(key); } /// /// 删除缓存 /// /// 缓存Key /// public bool Remove(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } _cache.Remove(key); return !Exists(key); } /// /// 批量删除缓存 /// /// 缓存Key集合 /// public void RemoveAll(IEnumerable keys) { if (keys == null) { throw new ArgumentNullException(nameof(keys)); } keys.ToList().ForEach(item => _cache.Remove(item)); } public string Get(string key) { return _cache.Get(key)?.ToString(); } /// /// 获取缓存 /// /// 缓存Key /// public T Get(string key) where T : class { if (key == null) { throw new ArgumentNullException(nameof(key)); } return _cache.Get(key) as T; } public void Dispose() { if (_cache != null) _cache.Dispose(); GC.SuppressFinalize(this); } }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。