1.Cache与Session的区别
每个用户都有自己单独的Session对象但是放在Cache中的数据是大家共享的protected void SetCache()
{ //判断缓存是否为空 if (Cache["UserInfo"] == null) { Bll.UserInfoBll userInfobll = new Bll.UserInfoBll();//如果为空了,需要重新查询数据
List<UserInfo> list = userInfobll.GetUserInfo();//将经常查询,但不是经常改动的数据放在缓存当中
//将数据放到缓存中 //第一种方法 //Cache["UserInfo"] = list; 一般采用这个方法(如果数据修改了,后台添加数据时,提交表单时,可以直接移除Cache,这样不依赖于缓存依赖项) //第二种方法(使用下面的重载) //public void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback); //1.键 //2.值 //3.CacheDependency dependencies (监视数据库表的数据是否改动,如果改动会给缓存发送一个消息) 缓存依赖项 //4.DateTime absoluteExpiration 缓存的过期时间 绝对过期时间 比如 1天 //5.TimeSpan slidingExpiration 时间差(DateTime-DateTime = TimeSpan(结果的类型是TimeSpan类型)) //6.CacheItemPriority priority 缓存的优先级 //7.CacheItemRemovedCallback onRemoveCallback 缓存移除的原因(委托) Cache.Insert("UserInfo", list, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, RemoveCache); //强制移除 Cache //Cache.Remove(UserInfo);}
else { List<UserInfo> list = (List<UserInfo>)Cache["UserInfo"]; } }
/// <summary>
/// 缓存移除原因 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="reason"></param> protected void RemoveCache(string key, object value, CacheItemRemovedReason reason) { //方法的签名和委托保持一致 //1.CacheItemRemovedReason F12可以查看原因 if(reason == CacheItemRemovedReason.Expired)//如果时间到期 { //缓存移除的原因写入日志中 } }