Google 구아바 CacheBuilder
을 사용하여 Cache
인스턴스를 만듭니다. 이름에서 알 수 있듯이,maxSize가 지정되지 않은 경우 Google Guava 캐시가 SIZE 항목을 퇴장합니다.
return CacheBuilder.newBuilder()
.initialCapacity(initialCapacity)
.expireAfterAccess(expirationInterval, TimeUnit.SECONDS)
.removalListener(LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER)
.build();
내 제거 수신기는 다음과 같습니다 :
private static final RemovalListener<MyKey, MyRecord> LOGGING_AUTOEVICTION_ONLY_REMOVAL_LISTENER
= new RemovalListener<MyKey, MyRecord>() {
@Override
public void onRemoval(RemovalNotification<MyKey, MyRecord objectObjectRemovalNotification) {
if (objectObjectRemovalNotification.wasEvicted()) {
log.debug("Entry evicted from cache: {} - Reason: {}", objectObjectRemovalNotification, objectObjectRemovalNotification.getCause());
}
}
};
마지막으로, 나는 내 캐시 오직 get
항목, 여기 get(K key, Callable<? extends V> valueLoader)
를 사용하여 내 코드는 다음과 같이 보입니다 문제 : 위의 코드에서 다음 로그 출력이 표시됩니다.
19:08:03.287 DEBUG [MyCache] - Entry evicted from cache: MyKey[123][email protected] - Reason: SIZE
CacheBuilder 호출에서 maximumSize()
을 사용하지 않았을 때 레코드가 내 캐시에서 제거되는 이유는 무엇입니까? 나는 그것이 "무게"와 관련이 있다고 생각합니다. 그렇다면 만료 시간 전에 캐시 항목이 제거되지 않도록하려면 maxWeight()
에 대해 알아야 할 사항은 무엇입니까?
참고 Google 구아바 사이트의 Caches Explained에 대해 알고 있습니다.
아니요, 무게 고려 사항과 상관없이 발생하지 않아야합니다. 오류를 보여주는 SSCCE를 구성 할 수 있습니까? –
또한, 이것은 SO 질문보다는 버그 보고서로 더 적합 할 것 같습니다. –
Bleh. 추가 질문 : 구아바의 어떤 버전을 사용하고 있습니까? 나는 근원을보고있다. 그리고 이것은 꽤 평평하게 불가능한 것처럼 보인다. –