缓存
记录一下写服务器缓存的代码,
public interface ICacheStorageProvider
{
object Get(string key);
void Put(string key, object value);
void Put(string key, object value, TimeSpan validFor);
void Remove(string key);
void Clear();
}
public class DefaultCacheStorageProvider : ICacheStorageProvider
{
public void Put(string key, object value)
{
HttpRuntime.Cache.Insert(
key,
value,
null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Normal,
null);
}
public void Put(string key, object value, TimeSpan validFor)
{
HttpRuntime.Cache.Insert(
key,
value,
null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
validFor,
System.Web.Caching.CacheItemPriority.Normal,
null);
}
public void Remove(string key)
{
HttpRuntime.Cache.Remove(key);
}
public void Clear()
{
var all = HttpRuntime.Cache
.AsParallel()
.Cast<DictionaryEntry>()
.Select(x => x.Key.ToString())
.ToList();
foreach (var key in all)
{
Remove(key);
}
}
public object Get(string key)
{
return HttpRuntime.Cache.Get(key);
}
}
public interface ICacheService
{
object Get(string key);
void Put(string key, object value);
void Put(string key, object value, TimeSpan validFor);
void Remove(string key);
void Clear();
}
public class DefaultCacheService : ICacheService
{
private readonly ICacheStorageProvider _cacheStorageProvider;
private readonly string _prefix;
public DefaultCacheService(ICacheStorageProvider cacheStorageProvider, string prefix)
{
_cacheStorageProvider = cacheStorageProvider;
_prefix = prefix;
}
public object Get(string key)
{
return _cacheStorageProvider.Get(BuildFullKey(key));
}
public void Put(string key, object value)
{
_cacheStorageProvider.Put(BuildFullKey(key), value);
}
public void Put(string key, object value, TimeSpan validFor)
{
_cacheStorageProvider.Put(BuildFullKey(key), value, validFor);
}
public void Remove(string key)
{
_cacheStorageProvider.Remove(BuildFullKey(key));
}
public void Clear()
{
_cacheStorageProvider.Clear();
}
private string BuildFullKey(string key)
{
return String.Concat(_prefix, "_", key);
}
}
创建完以上四个类之后,就可以开始着手使用缓存了。
public class BaseDataCache
{
private static readonly ICacheService cacheServiceSpecial;
static BaseDataCache()
{
ICacheStorageProvider cacheStorageProvider = new DefaultCacheStorageProvider();
cacheServiceSpecial = new DefaultCacheService(cacheStorageProvider, "Special");
}
/// <summary>
/// 本缓存用于资源和视频页面
/// </summary>
/// <param name="schoolPhaseId"></param>
/// <param name="subjectId"></param>
/// <returns></returns>
public static List<SpecialCacheDto> GetSpecial(int schoolPhaseId, int subjectId)
{
var basicDataContext = BasicDataContext.GetContext();
var key = "Special_" + schoolPhaseId + "_" + subjectId;
var specialWebDic = cacheServiceSpecial.Get(key) as List<SpecialCacheDto>;
if (specialWebDic == null)
{
specialWebDic = basicDataContext.Specials.Where(s => s.SchoolPhaseID == schoolPhaseId && s.SubjectID == subjectId && !s.Name.Contains("旧")).Select(s => new SpecialCacheDto
{
SpecialId = s.SpecialID ?? 0,
SpecialName = s.Name,
ParentId = s.ParentID ?? 0,
ChildCount = s.ChildCount,
}).ToList();
cacheServiceSpecial.Put(key, specialWebDic, new TimeSpan(1, 0, 0, 0));
}
return specialWebDic;
}
}
浙公网安备 33010602011771号