using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Core.Caches
{
public interface ICacheService : IDisposable
{
///
/// 验证缓存项是否存在
///
/// 缓存Key
///
bool Exists(string key);
///
/// 添加缓存
///
/// 缓存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);
void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false);
void AddOrUpdate(string key, object value, int expireSeconds = -1, bool isSliding = false);
///
/// 删除缓存
///
/// 缓存Key
///
bool Remove(string key);
///
/// 批量删除缓存
///
/// 缓存Key集合
///
void Remove(IEnumerable keys);
///
/// 获取缓存
///
/// 缓存Key
///
T? Get(string key) where T : class;
object? Get(Type type, string key);
///
/// 获取缓存
///
/// 缓存Key
///
string? Get(string key);
#region ConcurrentDictionary风格方法
///
/// 尝试添加,仅当Key不存在时添加成功
///
bool TryAdd(string key, string value, int expireSeconds = -1);
///
/// 尝试添加对象,仅当Key不存在时添加成功
///
bool TryAdd(string key, T value, int expireSeconds = -1) where T : class;
///
/// 尝试获取值,返回是否存在
///
bool TryGetValue(string key, out string? value);
///
/// 尝试获取对象,返回是否存在
///
bool TryGetValue(string key, out T? value) where T : class;
///
/// 尝试移除并返回被移除的值
///
bool TryRemove(string key, out string? value);
///
/// 尝试更新,仅当Key存在时更新
///
bool TryUpdate(string key, string newValue, int expireSeconds = -1);
///
/// 获取或添加:Key存在则返回现有值,不存在则添加并返回新值
///
string GetOrAdd(string key, string value, int expireSeconds = -1);
///
/// 获取或添加(工厂方法):Key存在则返回现有值,不存在则通过工厂方法生成值并添加
///
string GetOrAdd(string key, Func valueFactory, int expireSeconds = -1);
///
/// 获取或添加对象
///
T GetOrAdd(string key, Func valueFactory, int expireSeconds = -1) where T : class;
#endregion
}
}