IMemoryCache 使用

2024-07-16 1478阅读

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);
     }
 }
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]