// namespace SafeCampus.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 事务 }