62,243
社区成员




// 缓存操作父类
public abstract class AbstractCache : ICache
{
// 读取单个缓存,不同的缓存实现不同,所以无法提供默认实现
public abstract T Get<T>(string key);
// 批量读取缓存的默认实现
public virtual IDictionary<string, T> GetAll<T>(IEnumerable<string> keys)
{
var resultDic = new Dictionary<string, T>();
foreach (var item in items)
{
resultDic.Add(item, Get<T>(item));
}
return resultDic;
}
}
// 基于 System.Web.HttpRuntime.Cache 运行时缓存的封装
public class HttpRuntimeCache : AbstractCache
{
public override T Get<T>(string key)
{
var ret = HttpRuntime.Cache.Get(key);
if (ret == null)
{
return default(T);
}
return ClonedCast<T>(ret);
}
}
public class RedisCache : AbstractCache
{
public override T Get<T>(string key)
{
byte[] data;
using (var client = GetManager().GetClient())
{
data = client.Get<byte[]>(key);
}
if (data == null)
return default(T);
return DeSerializ<T>(Encoding.UTF8.GetString(data));
}
// 批量读取缓存优化实现
public override IDictionary<string, T> GetAll<T>(IEnumerable<string> keys)
{
IDictionary<string, byte[]> data;
using (var client = GetManager().GetClient())
{
data = client.GetAll<byte[]>(keys);
}
var resultDic = new Dictionary<string, T>();
foreach (var kvp in data)
{
resultDic.Add(kvp.Key, kvp.Value == null ? default(T) : DeSerializ<T>(Encoding.UTF8.GetString(kvp.Value)));
}
return resultDic;
}
}