짧은 기간에만 관련있는 데이터에 대해 jboss-cache를 생성하려고합니다. 그 시간이 지나면 데이터는 버리고 각 메모리를 해제해야합니다.JBoss-Cache 영역이 퇴거되는 것을 방지하려면 어떻게해야합니까?
/my_region
/session_1
/datanode_1
attribute1: value1
/datanode_2
attribute2: value2
/session_2
...
/session_3
...
...
...
을 그리고 내 퇴거 정책 구성은 다음과 같습니다 :
캐시는 다음과 같이 구성되어
<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>
이 작동 : /my_region
100 명 이상의 아이들, 가장 최근에 사용 된 아이를 얻을 때 그 지역이 100 명의 어린이들로 줄어들도록 축출됩니다.
LRUPolicy
의 문제점은 제거 된 노드에 하위 노드가있는 경우 they're not completely removed, but marked with jboss:internal:uninitialized: null
instead입니다. 이 동작은 영구 저장소에서 캐시를 가져 오지 않도록 캐시 된 엔터티에 적합하지만 지속되지 않고 다시 액세스 할 수없는 엔터티를 캐싱하는 데는 적합하지 않습니다.
따라서 노드를 제거하려면 evict를 remove로 대체하는 LRUPolicy
이라는 확장자를 작성했습니다.
@Override
public void evict(Fqn fqn) throws Exception {
cache_.remove(fqn);
}
이 새로운 정책은 뒤에 joss:internal:uninitialized: null
년대를 떠나지 않지만, maxNodes
에 도달하면 그것은 /my_region
노드를 제거합니다. LRUPolicy
을 다시 붙이면 영역 노드 자체가 실제로 축출되어 unitialized
태그가 표시되지만 가장 최근에 사용한 100 개의 자식이 여전히 남아있는 것으로 나타났습니다.
어떻게 지역 자체가 퇴거되는 것을 방지 할 수 있습니까? eviction from expiration을 분리하지 않고 퇴거 대신 제거 작업을 수행하는 것이 더 좋은 방법일까요?
jboss-cache 버전 1.3.0.SP4를 사용하고 있습니다.
jboss-cache의 버전은 무엇입니까? – skaffman
1.3.0.SP4, 질문에 포함하겠습니다. – hvrauhal