경량 Java 객체 캐시 API
질문.
Java in-memory 객체 캐싱 API를 찾고 있습니다.추천할 만한 게 있나요?과거에 어떤 솔루션을 사용했습니까?
현재의
지금은 지도를 사용하고 있습니다.
Map cache = new HashMap<String, Object>();
cache.put("key", value);
요구 사항들
다음과 같은 기본 기능을 포함하도록 캐시를 확장해야 합니다.
- 최대 크기
- 존속 가능 시간
다만, 다음과 같은 고도의 기능은 필요 없습니다.
- 여러 프로세스(캐시 서버)로부터의 액세스
- 지속성(디스크에 대한)
제안들
메모리 내 캐시:
- Guava CacheBuilder - 현재 개발 중입니다.이 프레젠테이션을 참조하십시오.
- LRUMap - API를 통한 설정.TTL 없음캐시용으로 설계되지 않았습니다.
- whirlycache - XML 설정.메일링 리스트최종 갱신 2006년
- cache4j - XML 설정.문서(러시아어)최종 갱신 2006년
엔터프라이즈 캐싱:
EHCache 너무 좋아요.메모리 캐시에 를 작성할 수 있습니다.메모리 캐시의 작성 예에 대해서는, 코드 샘플을 참조해 주세요.최대 크기 및 수명 시간을 지정할 수 있습니다.
EHCache는 몇 가지 고급 기능을 제공하지만, 사용하고 싶지 않다면 사용하지 마십시오.하지만 요구 사항이 변경될 경우, 그들이 거기에 있다는 것을 알게 되어 기쁩니다.
이것은 메모리 캐시 내입니다.구성 파일이 없는 코드로 작성되었습니다.
CacheManager cacheManager = CacheManager.getInstance();
int oneDay = 24 * 60 * 60;
Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay);
cacheManager.addCache(memoryOnlyCache);
200개의 요소를 저장할 수 있는 24시간의 ttl 캐시를 만듭니다.
Google Guava(API)에 부속되어 있는 것이 매우 마음에 듭니다.
JavaDoc에는 사용 편의성과 성능을 모두 보여주는 매우 깔끔한 예가 있습니다.
ConcurrentMap<Key, Graph> graphs = new MapMaker()
.concurrencyLevel(32)
.softKeys()
.weakValues()
.expiration(30, TimeUnit.MINUTES)
.makeComputingMap(
new Function<Key, Graph>() {
public Graph apply(Key key) {
return createExpensiveGraph(key);
}
});
게다가 Guava의 릴리스 10.0에서는, 보다 광범위한 패키지가 도입되었습니다(사용 방법에 관한 Wiki 엔트리가 있습니다).
KittyCache라는 작은 캐시 라이브러리도 다음 사이트에서 확인하실 수 있습니다.
https://github.com/treeder/kitty-cache
퍼포먼스 벤치마크와 ehcache의 비교가 있습니다.
SimpleJ에서 사용되고 있습니다.세컨드 레벨의 캐시로서 PA 프로젝트를 실시합니다.
LinkedHashMap을 체크하여 타사 jar 없이 단순 캐시를 구현할 수 있습니다.
Map <String, Foo> cache = new LinkedHashMap<String, Foo>(MAX_ENTRIES + 1, .75F, true) {
public boolean removeEldestEntry(Map.Entry<String, Foo> eldest) {
return size() > MAX_ENTRIES;
}
};
캐시에서 다음과 같이 얻을 수 있습니다.
Foo foo = cache.get(key);
if (foo == null && !cache.containsKey(key)) {
try {
FooDAO fooDAO = DAOFactory.getFooDAO(conn);
foo = fooDAO.getFooByKey(key);
cache.put(key, foo);
} catch (SQLException sqle) {
logger.error("[getFoo] SQL Exception when accessing Foo", sqle);
}
}
독자의 연습으로서 남겨진 휴식:)
Guava의 MapMaker는 CacheBuilder 클래스로 대체되었습니다.
합참은 시도되고 있습니다.캐싱 메커니즘에 관한 한 가볍지만 실제 코드를 조사하여 HashMap에서 수행하는 작업을 그대로 모방할 수 있습니다.당신은 당신이 찾고 있는 것에 대해 꽤 잘 알고 있는 것 같군요.
memcached에는 Java용 클라이언트가 있습니다.http://www.danga.com/memcached/ 캐싱 서버가 되려면 별도의 프로세스가 필요하지만 강력한 기능이 필요합니다.
언급URL : https://stackoverflow.com/questions/230649/lightweight-java-object-cache-api
'source' 카테고리의 다른 글
Java에서 이중을 부동으로 변환 (0) | 2022.09.03 |
---|---|
Linux에서 C에서 현재 시간을 밀리초 단위로 가져오려면 어떻게 해야 합니까? (0) | 2022.09.03 |
Java에서 이진 문자열을 기본 10 정수로 변환하는 방법 (0) | 2022.09.03 |
Eclipse, ADT 22.6에서 Android Virtual Devices(AVD)를 만들거나 편집할 수 없음 (0) | 2022.09.03 |
Vue.js는 이름에 점이 있는 DOM 커스텀이벤트에 바인드(부트스트랩이벤트 등) (0) | 2022.09.03 |