Ehcache内存元素的管理

Cache配置项


maxElementsInMemory : 允许内存中最大的元素个数

overflowToDisk : 当元素的数量超过maxElementsInMemory的值时,是否允许存储到磁盘

diskPersistent   : 是否允许数据持久化到内存,如果是,即JVM重启缓存中的数据仍然有效,该设置影响性能,大概减低8倍性能

diskExpiryThreadIntervalSeconds : 磁盘中数据过期检查线程的轮询时间间隔

memoryStoreEvictionPolicy : 内存中数据元素的管理策略,当元素的数量超过maxElementsInMemory的值时,将触发该策略把内存中的元素移出,有:LFU:最近最少使用的元素  先移出;FIFO:最先进入的元素被移出;LRU:使用越少的元素被移出

 

eternal :  true时表示缓存中的数据永远不会过期;false时表示缓存中的数据会过期,过期的依据需要根据timeToIdleSeconds 和 timeToLiveSeconds 的值

timeToIdleSeconds : 允许缓存中数据的最大空闲时间,即cache.get(key)最近一次被调用离现在的时间间隔如果大于该时间,即该元素会被过期expiry

timeToLiveSeconds : 允许缓存中数据的最大生存时间,0时表示无限大。cache.put(element)到现在的时间间隔如果大于该时间,即该元素被过期expiry

元素在缓存中被过期expiry,只需满足上面timeToIdleSeconds和timeToLiveSeconds任何一个条件即可

 

注意的是触发ehcache去检查这个元素是否过期expiry,是由用户访问了元素,即调用cache.get(key)按需触发,这时ehcache才会去检查这个元素是否过期,如果过期就把该元素清除,并返回null。所以如果存在这样的场景:有些元素我们一直都不去访问,且内存中的元素数量又没超出maxElementsInMemory的值,那么这些过期元素将一直驻留在内存中。

为了解决这个问题,我们应该创建一个后台线程,这个线程可以过一段时间去触发一下cache.evictExpiredElements(),这样即可把内存中驻留的过期元素清除。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值