Asp.Net中Cache操作类实例详解
本文以一个Asp.Net的Cache操作类实例代码来详细描述了cache缓存的结构及实现方法,完整代码如下所示:
///<head>
///<function>
///存储类(存储UserInfo信息)
///</function>
///<description>
///用Cache存储用户信息
///在指定间隔(TimeOut)内取,则可以从Cache中取,
///如果超出存储时间,则从数据库取用户信息数据
///作為所有用户信息的存儲類.
///</description>
///<author>
///<name>ChengKing</name>
///</author>
///</head>
usingSystem;
usingSystem.Web;
usingSystem.Web.Caching;
namespaceCommon
{
///<summary>
///存储类(存储UserInfo信息)
///</summary>
publicclassStorage
{
publicStorage()
{
//
//TODO:在此处添加构造函数逻辑
//
}
#region方法
//实现“一键一值”存储方法,最普通的存储方法
//(“一键一值”指一个Identify存储一个值,下面还有一个“一键多值”方法,因为有时候需要一个键存储多个变量对象值)
publicstaticboolInsertIdentify(stringstrIdentify,objectInfo)
{
if(strIdentify!=null&&strIdentify.Length!=0&&userInfo!=null)
{
//建立回调委托的一个实例
CacheItemRemovedCallbackcallBack=newCacheItemRemovedCallback(onRemove);
//以Identify为标志,将userInfo存入Cache
HttpContext.Current.Cache.Insert(strIdentify,userInfo,null,
System.DateTime.Now.AddSeconds(300),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,
callBack);
returntrue;
}
else
{
returnfalse;
}
}
//判断存储的"一键一值"值是否还存在(有没有过期失效或从来都未存储过)
publicstaticboolExistIdentify(stringstrIdentify)
{
if(HttpContext.Current.Cache[strIdentify]!=null)
{
returntrue;
}
else
{
returnfalse;
}
}
//插入"一键多值"方法
//***其中StorageInfType是一个Enum,里面存有三种类型:UserInfSysInfPageInf
//这个枚举如下:
/*
publicenumStorageInfType
{
///<summary>用户信息</summary>
UserInf=0,
///<summary>页面信息</summary>
PageInf=1,
///<summary>系统信息</summary>
SysInf=2
}
//此枚举是自己定义的.可根据需要定义不同的枚举
//加个枚举目的是实现“一键多值”存储方法,事实上Cache中是存放了多个变量的,只不过被这个类封装了,
//程序员感到就好像是“一键一值”.这样做目的是可以简化开发操作,否则程序员要存储几个变量就得定义几个Identify.
publicstaticboolInsertCommonInf(stringstrIdentify,StorageInfTypeenumInfType,objectobjValue)
{
if(strIdentify!=null&&strIdentify!=""&&strIdentify.Length!=0&&objValue!=null)
{
//RemoveCommonInf(strIdentify,enumInfType);
//建立回调委托的一个实例
CacheItemRemovedCallbackcallBack=newCacheItemRemovedCallback(onRemove);
if(enumInfType==StorageInfType.UserInf)
{
//以用户UserID+信息标志(StorageInfType枚举),将userInfo存入Cache
HttpContext.Current.Cache.Insert(strIdentify+StorageInfType.UserInf.ToString(),objValue,null,
System.DateTime.Now.AddSeconds(18000),//单位秒
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,
callBack);
}
if(enumInfType==StorageInfType.PageInf)
{
//以用户UserID+信息标志(StorageInfType枚举),将PageInfo存入Cache
HttpContext.Current.Cache.Insert(strIdentify+StorageInfType.PageInf.ToString(),objValue,null,
System.DateTime.Now.AddSeconds(18000),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,
callBack);
}
if(enumInfType==StorageInfType.SysInf)
{
//以用户UserID+信息标志(StorageInfType枚举),将SysInfo存入Cache
HttpContext.Current.Cache.Insert(strIdentify+StorageInfType.SysInf.ToString(),objValue,null,
System.DateTime.Now.AddSeconds(18000),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default,
callBack);
}
returntrue;
}
returnfalse;
}
//读取“一键多值”Identify的值
publicstaticboolReadIdentify(stringstrIdentify,outUserInfouserInfo)
{
//取出值
if((UserInfo)HttpContext.Current.Cache[strIdentify]!=null)
{
userInfo=(UserInfo)HttpContext.Current.Cache[strIdentify];
if(userInfo==null)
{
returnfalse;
}
returntrue;
}
else
{
userInfo=null;
returnfalse;
}
}
//手动移除“一键一值”对应的值
publicstaticboolRemoveIdentify(stringstrIdentify)
{
//取出值
if((UserInfo)HttpContext.Current.Cache[strIdentify]!=null)
{
HttpContext.Current.Cache.Remove(strIdentify);
}
returntrue;
}
//此方法在值失效之前调用,可以用于在失效之前更新数据库,或从数据库重新获取数据
privatestaticvoidonRemove(stringstrIdentify,objectuserInfo,CacheItemRemovedReasonreason)
{
}
#endregion
}
}