// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛 // // SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款: // 1.请不要删除和修改根目录下的LICENSE文件。 // 2.请不要删除和修改SimpleAdmin源码头部的版权声明。 // 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin // 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。 // 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。 // 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。 namespace SimpleAdmin.Cache; /// /// 缓存服务 /// public partial interface ISimpleCacheService { #region 基础操作 /// 是否包含缓存项 /// /// bool ContainsKey(string key); /// 设置缓存项 /// 键 /// 值 /// 过期时间,秒。小于0时采用默认缓存时间 /// bool Set(string key, T value, int expire = -1); /// 设置缓存项 /// 键 /// 值 /// 过期时间 /// bool Set(string key, T value, TimeSpan expire); /// 获取缓存项 /// 键 /// T Get(string key); /// 批量移除缓存项 /// 键集合 /// int Remove(params string[] keys); /// 清空所有缓存项 void Clear(); /// 设置缓存项有效期 /// 键 /// 过期时间 bool SetExpire(string key, TimeSpan expire); /// 获取缓存项有效期 /// 键 /// TimeSpan GetExpire(string key); /// /// 模糊删除 /// /// 匹配关键字 void DelByPattern(string pattern); #endregion 基础操作 #region 集合操作 /// 批量获取缓存项 /// /// /// IDictionary GetAll(IEnumerable keys); /// 批量设置缓存项 /// /// /// 过期时间,秒。小于0时采用默认缓存时间 void SetAll(IDictionary values, int expire = -1); /// 获取列表 /// 元素类型 /// 键 /// IList GetList(string key); /// 获取哈希 /// 元素类型 /// 键 /// IDictionary GetDictionary(string key); /// 获取队列 /// 元素类型 /// 键 /// IProducerConsumer GetQueue(string key); /// 获取栈 /// 元素类型 /// 键 /// IProducerConsumer GetStack(string key); /// 获取Set /// /// /// ICollection GetSet(string key); #endregion 集合操作 #region 高级操作 /// 添加,已存在时不更新 /// 值类型 /// 键 /// 值 /// 过期时间,秒。小于0时采用默认缓存时间 /// bool Add(string key, T value, int expire = -1); /// 设置新值并获取旧值,原子操作 /// /// 常常配合Increment使用,用于累加到一定数后重置归零,又避免多线程冲突。 /// /// 值类型 /// 键 /// 值 /// T Replace(string key, T value); /// 尝试获取指定键,返回是否包含值。有可能缓存项刚好是默认值,或者只是反序列化失败,解决缓存穿透问题 /// 值类型 /// 键 /// 值。即使有值也不一定能够返回,可能缓存项刚好是默认值,或者只是反序列化失败 /// 返回是否包含值,即使反序列化失败 bool TryGetValue(string key, out T value); /// 累加,原子操作 /// 键 /// 变化量 /// long Increment(string key, long value); /// 累加,原子操作 /// 键 /// 变化量 /// double Increment(string key, double value); /// 递减,原子操作 /// 键 /// 变化量 /// long Decrement(string key, long value); /// 递减,原子操作 /// 键 /// 变化量 /// double Decrement(string key, double value); #endregion 高级操作 #region 事务 /// 提交变更。部分提供者需要刷盘 /// int Commit(); /// 申请分布式锁 /// 要锁定的key /// 锁等待时间,单位毫秒 /// IDisposable AcquireLock(string key, int msTimeout); /// 申请分布式锁 /// 要锁定的key /// 锁等待时间,申请加锁时如果遇到冲突则等待的最大时间,单位毫秒 /// 锁过期时间,超过该时间如果没有主动释放则自动释放锁,必须整数秒,单位毫秒 /// 失败时是否抛出异常,如果不抛出异常,可通过返回null得知申请锁失败 /// IDisposable AcquireLock(string key, int msTimeout, int msExpire, bool throwOnFailure); #endregion 事务 }