Community Server 的缓存方案
CS中的缓存分为2种:一种采用System.Web.Caching,另一种采用HttpContext.Items(由于CS大量的采用服务器端控件没有使用页面级的缓存)。在CommunityServerComponents项目中的类CommunityServer.Components.CSCache实现了这几种失效策略的缓存
这篇随笔讨论的是Community Server 开源项目里的缓存模块,并附上该模块源码。
CS中的缓存分为2种:一种采用System.Web.Caching,另一种采用HttpContext.Items(由于CS大量的采用服务器端控件没有使用页面级的缓存)。在CommunityServerComponents项目中的类CommunityServer.Components.CSCache实现了这几种失效策略的缓存:Insert(根据参数seconds来确定缓存时间)、MicroInsert(插入生存周期短的缓存项目)、Max(插入生存周期很长的缓存项目,在系统运行期间永久缓存),相关代码如下:
Code
/// <summary>
/// 插入缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
public static void Insert(string key, object obj)
{
Insert(key,obj,null,1);
}
/// <summary>
/// 插入缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="dep">CacheDependency对象</param>
public static void Insert(string key, object obj, CacheDependency dep)
{
Insert(key,obj,dep,MinuteFactor * 3);
}
/// <summary>
/// 插入缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="seconds">缓存时间(单位:秒)</param>
public static void Insert(string key, object obj, int seconds)
{
Insert(key,obj,null,seconds);
}
/// <summary>
/// 插入缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="seconds">缓存时间(单位:秒)</param>
/// <param name="priority">优先级</param>
public static void Insert(string key, object obj, int seconds, CacheItemPriority priority)
{
Insert(key,obj,null,seconds,priority);
}
/// <summary>
/// 插入缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="dep">CacheDependency对象</param>
/// <param name="seconds">缓存时间(单位:秒)</param>
public static void Insert(string key, object obj, CacheDependency dep, int seconds)
{
Insert(key,obj,dep,seconds,CacheItemPriority.Normal);
}
/// <summary>
/// 插入缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="dep">CacheDependency对象</param>
/// <param name="seconds">缓存时间(单位:秒)</param>
/// <param name="priority">优先级</param>
public static void Insert(string key, object obj, CacheDependency dep, int seconds, CacheItemPriority priority)
{
if(obj != null)
{
_cache.Insert(key,obj,dep,DateTime.Now.AddSeconds(Factor * seconds), TimeSpan.Zero,priority,null);
}
}
/// <summary>
/// 插入生存周期短的缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="secondFactor">缓存时间(单位:秒)</param>
public static void MicroInsert (string key, object obj, int secondFactor)
{
if(obj != null) {
_cache.Insert(key,obj,null,DateTime.Now.AddSeconds(Factor * secondFactor), TimeSpan.Zero);
}
}
/// <summary>
/// 插入生存周期长的缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
public static void Max(string key, object obj)
{
Max(key,obj,null);
}
/// <summary>
/// 插入生存周期长的缓存项目
/// </summary>
/// <param name="key">键值</param>
/// <param name="obj">要插入缓存的对象</param>
/// <param name="dep">CacheDependency对象</param>
public static void Max(string key, object obj, CacheDependency dep)
{
if(obj != null)
{
_cache.Insert(key,obj,dep,DateTime.MaxValue,TimeSpan.Zero,CacheItemPriority.AboveNormal,null);
}
}
压缩包是提取该模块的源码,可以在项目中直接使用。

浙公网安备 33010602011771号