ehcache 中 eternal 和 maxElementsInMemory 的作用?
Role of eternal and maxElementsInMemory in 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 个元素要放入缓存时会发生什么。它们不会被存储在缓存中并被丢弃吗?
当 eternal 为 false 时,您可以使用 timeToLiveSeconds
属性控制项目在缓存中保留的时间。例如,对于 1 分钟后过期的项目:
<cache name="customerList" maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="60" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />
如果您有超过 1000 个项目并指定了 maxElementsInMemory=1000
,那么缓存中只会存储其中的 1000 个。 maxElementsInMemory
是上限。
这两个配置选项与两个基本缓存概念相关:
- 数据新鲜度/过期:缓存中的数据可以过期以保证缓存returns不会过时。这在 Ehcache 2.x 中由不同的属性控制:
- eternal 属性 - 如果 true 表示映射永不过期,
- 生存时间 (TTL) - 创建缓存映射后的持续时间,
- and/or 空闲时间 (TTI) - 上次访问缓存映射后的持续时间
- 容量控制/逐出:限制缓存大小,这样您就不会通过填满缓存来耗尽应用程序的内存
- 当达到最大映射数时,缓存将开始逐出条目 - 逐出的确切条目取决于缓存配置/实现
- 在Ehcache2.x中,maxElementsInMemory是一个基于计数的容量控制,还有一个基于内存大小的选项。
我来晚了回答这个问题。但因为我也经历过这个问题所以想分享我的经验。
嗨@emilly,我专门回答你的问题,我们将使用配置。由@RCB分享。
<cache name="customerList" maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="60" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />
问题一:
As timeToLiveSeconds="60" 所以这是 "customerList" 数据在缓存 (L2) 中的最长时间。 缓存逐出 与此属性的值没有直接关系(timeToLiveSeconds)。
例如如果 customerList 是在 12:00:00 上创建的,它将在 12:00:59.
之前可用
问题二:
说我想在 1000 之后再添加一个元素。我缓存将逐出最近最少使用的元素并将最新的元素存储在列表中,正如我提到的 memoryStoreEvictionPolicy。对吗?
是的,这是缓存 (L2) 逐出,它将根据 memoryStoreEvictionPolicy="LRU" 进行,在此示例中,它将在 TTL 之前进行有效操作(60 秒)。
我的项目中有以下配置
<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 个元素要放入缓存时会发生什么。它们不会被存储在缓存中并被丢弃吗?
当 eternal 为 false 时,您可以使用 timeToLiveSeconds
属性控制项目在缓存中保留的时间。例如,对于 1 分钟后过期的项目:
<cache name="customerList" maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="60" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />
如果您有超过 1000 个项目并指定了 maxElementsInMemory=1000
,那么缓存中只会存储其中的 1000 个。 maxElementsInMemory
是上限。
这两个配置选项与两个基本缓存概念相关:
- 数据新鲜度/过期:缓存中的数据可以过期以保证缓存returns不会过时。这在 Ehcache 2.x 中由不同的属性控制:
- eternal 属性 - 如果 true 表示映射永不过期,
- 生存时间 (TTL) - 创建缓存映射后的持续时间,
- and/or 空闲时间 (TTI) - 上次访问缓存映射后的持续时间
- 容量控制/逐出:限制缓存大小,这样您就不会通过填满缓存来耗尽应用程序的内存
- 当达到最大映射数时,缓存将开始逐出条目 - 逐出的确切条目取决于缓存配置/实现
- 在Ehcache2.x中,maxElementsInMemory是一个基于计数的容量控制,还有一个基于内存大小的选项。
我来晚了回答这个问题。但因为我也经历过这个问题所以想分享我的经验。
嗨@emilly,我专门回答你的问题,我们将使用配置。由@RCB分享。
<cache name="customerList" maxElementsInMemory="1000" eternal="false" timeToLiveSeconds="60" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />
问题一:
As timeToLiveSeconds="60" 所以这是 "customerList" 数据在缓存 (L2) 中的最长时间。 缓存逐出 与此属性的值没有直接关系(timeToLiveSeconds)。
例如如果 customerList 是在 12:00:00 上创建的,它将在 12:00:59.
之前可用问题二: 说我想在 1000 之后再添加一个元素。我缓存将逐出最近最少使用的元素并将最新的元素存储在列表中,正如我提到的 memoryStoreEvictionPolicy。对吗?
是的,这是缓存 (L2) 逐出,它将根据 memoryStoreEvictionPolicy="LRU" 进行,在此示例中,它将在 TTL 之前进行有效操作(60 秒)。