namespace WIDESEA_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 事务
}