/// <summary>
/// 缓存接口
/// </summary>
public interface ICache
{
/// <summary>
/// 从缓存中取得指定键的值
/// </summary>
/// <param name="type">指定的类型</param>
/// <param name="key">指定的键值</param>
/// <returns></returns>
object Get(Type type, string key);
/// <summary>
/// 从缓存中取得指定键的值
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="key">指定的键值</param>
/// <returns>指定键值的值</returns>
T Get<T>(string key);
/// <summary>
/// 从缓存中取出对象,如果没有缓存调用acquire方法
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="key">键值</param>
/// <param name="acquire">如果缓存中没有对象的处理方法,处理方法</param>
/// <param name="cacheTime">如果缓存中没有对象的处理方法设置缓存过期时间</param>
/// <returns>指定键值的值</returns>
T Get<T>(string key, Func<T> acquire, TimeSpan cacheTime);
/// <summary>
/// 从缓存中取出对象,如果没有缓存调用acquire方法
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="key">键值</param>
/// <param name="acquire">如果缓存中没有对象的处理方法,处理方法</param>
/// <param name="expiredTime">缓存绝对过期时间</param>
/// <returns>指定键值的值</returns>
T Get<T>(string key, Func<T> acquire, DateTime expiredTime);
/// <summary>
/// 从缓存中取出对象,如果没有缓存调用acquire方法
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="key">键值</param>
/// <param name="acquire">如果缓存中没有对象的处理方法,处理方法</param>
/// <param name="cacheExpiration">预先定义的缓存策略类型</param>
/// <returns>指定键值的值</returns>
T Get<T>(string key, Func<T> acquire, CacheExpirationTypes cacheExpiration);
/// <summary>
/// 添加一个对象到到缓存,使用缺省过期时间
/// </summary>
/// <param name="key">键值</param>
/// <param name="data">存储到缓存中的对象</param>
/// <param name="dependencyKeys">父键值</param>
void Set(string key, object data, params string[] dependencyKeys);
/// <summary>
/// 添加一个对象到到缓存
/// </summary>
/// <param name="key">键值</param>
/// <param name="data">存储到缓存中的对象</param>
/// <param name="slidingTime">缓存时间</param>
/// <param name="dependencyKeys">父键值</param>
void Set(string key, object data, TimeSpan slidingTime, params string[] dependencyKeys);
/// <summary>
/// 添加一个绝对过期时间的对象到缓存
/// </summary>
/// <param name="key">缓存键值</param>
/// <param name="data">缓存对象</param>
/// <param name="expiredTime">绝对过期时间</param>
/// <param name="dependencyKeys">父键值</param>
void Set(string key, object data, DateTime expiredTime, params string[] dependencyKeys);
/// <summary>
/// 添加一个对象到到缓存
/// </summary>
/// <param name="key">键值</param>
/// <param name="data">存储到缓存中的对象</param>
/// <param name="cacheExpiration">缓存过期类型</param>
/// <param name="dependencyKeys">父键值</param>
void Set(string key, object data, CacheExpirationTypes cacheExpiration, params string[] dependencyKeys);
/// <summary>
/// 添加文件依赖对象到缓存
/// </summary>
/// <param name="key">键值</param>
/// <param name="value">存储到缓存中的对象</param>
/// <param name="dependencyFiles">依赖文件项</param>
void SetFile(string key, object value, params string[] dependencyFiles);
/// <summary>
/// 添加文件依赖对象到缓存
/// </summary>
/// <param name="key">键值</param>
/// <param name="value">存储到缓存中的对象</param>
/// <param name="expiredTime">绝对过期时间</param>
/// <param name="dependencyFiles">依赖文件项</param>
void SetFile(string key, object value, DateTime expiredTime, params string[] dependencyFiles);
/// <summary>
/// 添加文件依赖对象到缓存
/// </summary>
/// <param name="key">键值</param>
/// <param name="value">存储到缓存中的对象</param>
/// <param name="slidingTime">缓存持续时间</param>
/// <param name="dependencyFiles">依赖文件项</param>
void SetFile(string key, object value, TimeSpan slidingTime, params string[] dependencyFiles);
/// <summary>
/// 判断是否已经缓存
/// </summary>
/// <param name="key">键值</param>
/// <returns>是否存在</returns>
bool IsSet(string key);
/// <summary>
/// 移除缓存
/// </summary>
/// <param name="key">键值</param>
void Remove(string key);
/// <summary>
/// 按模式移除缓存
/// </summary>
/// <param name="pattern">正则表达式模式</param>
void RemoveByPattern(string pattern);
/// <summary>
/// 清空缓存
/// </summary>
void Clear();
}