使用Spring3.1 Cache注解+EHCache遇到的问题

44 篇文章 0 订阅

关于Spring3.1 Cache注解的介绍请参看http://hanqunfeng.iteye.com/blog/1158824

 

这里只说一下遇到的问题,web应用,session超时为30分钟,使用Cache注解+EHCache,如下:

 
<cache name="andCache" maxElementsInMemory="10000"  
        maxElementsOnDisk="1000" eternal="false" overflowToDisk="true"  
        diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600"  
        memoryStoreEvictionPolicy="LFU" />  

说明:缓存名andCache,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效,

超过10000element时,element将会输出到磁盘中。

 

结果,在登录系统后,如果超过5分钟不访问系统,则会出现异常,

按照这样配置,我原以为,如果5分钟之内不访问应用,则缓存会失效,那么spring就会重新执行原先被缓存的方法,但实际上,方法并没有被重新执行,而是返回了null,貌似spring依旧是从缓存中查找,并且找到了key,只不过value已经是null了。

 

这样就会导致系统出现空指针异常,况且session也尚未超时,

但就算是将闲置时间设置为30分钟以上,用户在下次登录时一样会出现异常,但是第二次登录就又会正常,然后周而复始,貌似,只有当第一次取到null后,spring才会重新执行方法。

 

感觉上,好像ehcache清除缓存后,spring并不知道,因为key依旧可以在spring的cache中找到,但是通过key取值时,spring会从ehcache中查找,由于ehcache已经清除了缓存,所以返回值一定是null,而spring也把这个null当成了被缓存的value返回给系统。

 

使用spring自带的缓存机制没有遇到该问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值