List<string> rule = bllAction.GetRoleActionNameList(roleIds);
cache.Insert("CACHE_PERMISSION_RULE"+ user.PublisherId.ToString(), rule, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 60, 0), System.Web.Caching.CacheItemPriority.NotRemovable, null);
请问,为什么系统发布之后,偶尔会出现缓存丢失?
12 个回答
丢失的原因会有很多,可能是内存不够,可能是IIS重启等。
gws044010607:
现在就是不知道什么原因导致缓存丢失。。。。。。。正常情况下,我是在退出系统的时候清空缓存的。按这个设置,是1小时没操作才会丢失,但他们说是连续在操作的,所以不可能。至于内存的问题,应该不存在。IIS重启,这个可能性也不大,因为我们这个系统已经上线给很多客户在用,不大会重启的。
-
C# code
-
cache.Insert( " CACHE_PERMISSION_RULE " + user.PublisherId.ToString(), rule, null , [color = #FF0000]Cache.NoAbsoluteExpiration, new TimeSpan( 0 , 60 , 0 ), [ / color]System.Web.Caching.CacheItemPriority.NotRemovable, null ); cache.Insert( " CACHE_PERMISSION_RULE " + user.PublisherId.ToString(), rule, null , [color = #FF0000]这里指定一个绝对时间试试[ / color], System.Web.Caching.CacheItemPriority.NotRemovable, null );
cache.Insert("CACHE_PERMISSION_RULE"+ user.PublisherId.ToString(), rule, null, 这里指定一个绝对时间试试, System.Web.Caching.CacheItemPriority.NotRemovable, null);
导致应用程序重启的情况很多,比如内存占用高,bin目录的dll变动,web.config文件修改等。
HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象。
HttpRuntime.Cache:获取当前应用程序的Cache。
另外不同登录帐号存入Cache中的键值一定要不同.Cache中只会保存不同的键值..相同的就会冲掉
少了个参数,额。。
补上
DateTime outDt = Convert.ToDateTime("2011-02-15 16:12:34:456");
cache.Insert("CACHE_PERMISSION_RULE"+ user.PublisherId.ToString(), rule, null, outDt,System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null);
你是说的把Cache.NoAbsoluteExpiration这个换成绝对时间?
我们这个系统是上线了的,没人会去重启的,所以大虾你说的这种情况应该不会发生的。。。。。。。。
可以试试。你可以再去查查这个Insert方法,不同参数产生的不同效果
好像MSDN上有
http://s.yanghao.org/program/viewdetail.php?i=34444
问:
小弟在使用Cache存放对象。但是发现Cache有丢失的现象。不知道如何解决?
______________________________________________________________________________________________
答1:
对象是属于引用类型的数据
使用Application,Session,Cache保存对象 实际上只是保存对象的引用,也就是指向对象存放数据的指针。
______________________________________________________________________________________________
答2:
如果你要建一个全局性的对象
在Global.asax里面建立,这样,这个对象就可以在任何一张页面使用。
______________________________________________________________________________________________
答3:
如何设置Cache的生命周期呢?
______________________________________________________________________________________________
答4:
对于每个应用程序域均创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。有关此类实例的信息通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性来提供。
这是msdn上的解释 要是Cache的对象一直存在 可以在Global.asax里面建立 Global.asax运行在整个目录中及其所含的子目录每一一个页面程序的父应用程序域。
只要IIS服务不停下来,Global.asax中Cache的东西就一直在。
各个页面Cache的东西只是在这个页面执行UnPage_Load后(可以这么认为,准确的是被垃圾回收后或这个页面对象被拆构后)就被摧毁。
http://study.qqcf.com/web/716/226208.htm
本博客程序使用过程中,查看错误日志,发现以下错误:
< Date > 2007-12-13 18:07:26 出错文件:http://xianfen.net/Default.aspx </ Date >
< Message > 错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。 内部错误信息:未将对象引用设置到对象的实例。 </ Message >
</ ErrorItem >
< ErrorItem >
< Date > 2007-12-13 18:07:27 出错文件:http://xianfen.net/Default.aspx </ Date >
< Message > 错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。 内部错误信息:未将对象引用设置到对象的实例。 </ Message >
</ ErrorItem >
< ErrorItem >
< Date > 2007-12-13 21:01:47 出错文件:http://www.xianfen.net/Category5_1.aspx?ClassID=5 & page=1 </ Date >
< Message > 错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。 内部错误信息:未将对象引用设置到对象的实例。 </ Message >
</ ErrorItem >
< ErrorItem >
< Date > 2007-12-14 9:21:02 出错文件:http://www.xianfen.net/Archive200712.aspx?Year=2007 & Month=12 </ Date >
< Message > 错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。 内部错误信息:未将对象引用设置到对象的实例。 </ Message >
</ ErrorItem >
很多“未将对象引用设置到对象的实例。”,仔细审查每一行程序,没发现使用空对象的情况。无奈之时,在本机上随便调试,发现异常代码段之一为:
{
get
{
if (HttpContext.Current.Cache[ " BlogTitle " ] == null )
{
HttpContext.Current.Cache[ " BlogTitle " ] = ConfigurationManager.AppSettings[ " BlogTitle " ];
}
return HttpContext.Current.Cache[ " BlogTitle " ].ToString(); // 在此抛出异常"未将对象引用设置到对象实例"
}
}
为了提高性能,本博客系统多处使用缓存,但每次取缓存数据时都检查是否为空啊?只好 Google,发现有和我遇到一样问题的,原来缓存 Cache 在内存不足时会移除,看来虚拟空间的内存紧张到极点了,刚设置的缓存就被移除了!
将Cache用Application代替:
{
get
{
if (HttpContext.Current.Application[ " BlogTitle " ] == null )
{
HttpContext.Current.Application[ " BlogTitle " ] = ConfigurationManager.AppSettings[ " BlogTitle " ];
}
return HttpContext.Current.Application[ " BlogTitle " ].ToString();
}
}
问题解决!
google_ad_client = "pub-6296215529938421"; google_ad_slot = "7551901419"; google_ad_width = 728; google_ad_height = 90;