永恒和maxElementsInMemory在ehcache中的作用?

时间:2015-12-03 09:59:07

标签: java spring ehcache

我的项目中有以下配置

<defaultCache maxElementsInMemory="100" eternal="false" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" statistics="false" />

<cache name="customerList" maxElementsInMemory="1000" eternal="false" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />

根据我的理解eternal =true属性解释缓存永不过期。但是当我提到eternal =false时,缓存将保持多长时间?

我还提到maxElementsInMemory=1000,当我有超过1000个元素放入缓存时会发生什么。它们不会存储在缓存中并丢弃吗?

3 个答案:

答案 0 :(得分:1)

这两个配置选项与两个基本缓存概念有关:

  • 数据新鲜度/到期时间:缓存中的数据可能会过期,以保证缓存返回的内容不会过时。这在Ehcache 2.x中由不同的属性控制:
    • 永恒属性 - 如果为true则表示映射永不过期,
    • 生存时间(TTL) - 创建缓存映射后的持续时间,
    • 和/或空闲时间(TTI) - 上次访问缓存映射后的持续时间
  • 容量控制/驱逐:限制缓存大小,以便您不会通过填充缓存来耗尽应用程序的内存
    • 当达到最大映射数时,缓存将开始逐出条目 - 逐出的确切条目取决于缓存配置/实现
    • 在Ehcache 2.x中,maxElementsInMemory是一个基于计数的容量控制,还有一个基于内存大小的选项。

答案 1 :(得分:0)

当永恒为假时,您可以使用timeToLiveSeconds属性控制项目在缓存中停留的时间。例如,对于1分钟后过期的物品:

<cache name="customerList" maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="60" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />

如果您有超过1000个项目且已指定maxElementsInMemory=1000,则其中只有1000个将存储在缓存中。 maxElementsInMemory是一个上限。

答案 2 :(得分:0)

我很晚才回答这个问题。但是,由于我也经历过这个问题所以想分享我的经验。

您好@emilly,我已专门回答您的问题,我们将使用配置。由@RCB共享。

<cache name="customerList" maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="60" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />

问题1:

as timeToLiveSeconds =&#34; 60&#34; 因此它是&#34; customerList&#34;的最长时间。数据将存在于缓存(L2)中。 缓存逐出与此属性的值没有直接关系( timeToLiveSeconds )。

e.g。如果<00> customerList 是在12:00:00创建的,则它将在12:00:59之前可用。

问题2: 说我想在1000之后添加一个元素。我缓存将驱逐最近最少使用的元素,并在列表中存储最新元素,因为我提到了memoryStoreEvictionPolicy。是吗?

是的,这是缓存(L2)驱逐,它将根据 memoryStoreEvictionPolicy =&#34; LRU&#34; 而在此示例中它将在TTL之前进行有效操作(60秒)。