如何避免JBoss-Cache区域被驱逐?

hvr*_*hal 11 java jboss caching jboss-cache

我正在尝试为仅在短时间内相关的数据创建jboss-cache.在那之后,应该丢弃数据并释放相应的存储器.

缓存的组织方式如下:

/my_region
    /session_1
        /datanode_1
          attribute1: value1
        /datanode_2
          attribute2: value2
    /session_2
        ...
    /session_3
        ...
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

我的驱逐策略配置如下所示:

<attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute> 
<attribute name="EvictionPolicyConfig">
   <config>
      <attribute name="wakeUpIntervalSeconds">5</attribute>     
         <region name="/my_region">
     <attribute name="maxNodes">100</attribute>
     <attribute name="timeToLiveSeconds">1800</attribute>
        </region>
   </config>
</attribute>
Run Code Online (Sandbox Code Playgroud)

这样做:当/my_region有超过100个孩子时,最近最少使用的孩子被驱逐,以便该地区缩小回100个孩子.

与问题LRUPolicy是,当退出的节点有孩子,他们没有完全消除,但标有jboss:internal:uninitialized: null代替.此行为对于缓存的实体有意义,以避免从持久存储中获取它们,但它不适用于缓存未持久且永远不会再次访问的实体.

因此,为了删除节点,我创建了一个扩展,LRUPolicy用删除覆盖evict.

@Override
public void evict(Fqn fqn) throws Exception {
    cache_.remove(fqn);
}
Run Code Online (Sandbox Code Playgroud)

这个新策略不会joss:internal:uninitialized: null落后,但它会在到达/my_region时删除节点maxNodes.当我放LRUPolicy回去的时候,我注意到区域节点本身实际上被驱逐并得到了unitialized标签,但最近使用的100个孩子仍然存在.

如何防止该地区被驱逐呢?有没有更好的方法去除而不是驱逐而不将驱逐与过期分开?

我正在使用jboss-cache版本1.3.0.SP4.

Era*_*dan 5

你看过JBoss-Cache bugs存储库了吗?


编辑:

看看这个JBoss-Cache错误,看起来非常相关:

https://jira.jboss.org/jira/browse/JBCACHE-921

已在1.4.1.SP1中修复