주어진 예에서, 제 3자가 자신이 데이터 구조 (키 - 값 쌍)에 액세스한다고 생각하도록 캐시 작업을 추상화하는 상상 된 ExampleCache
클래스의 내부에 read-through CacheLoaderWriter
을 정의하는 내부 클래스가 있습니다. 내 질문에 loadAll
메서드가 포함됩니다.Ehcache에 병렬로 쓸 위험이 있습니까?
loadAll
이 EhCache에 동시에 쓰도록 작성된 경우 레코드 변경 또는 불안정의 위험이 있습니까? 사용자 정의 동시성을 처리하도록 EhCache가 구축 되었습니까?
class ExampleCacheLoader implements CacheLoaderWriter<String, ArrayList> {
private HashMap<String, ArrayList> map;
public CacheLoader() {
map = new HashMap<>();
}
@Override
public ArrayList<String> load(String s) throws Exception {
Map.Entry<String, ArrayList<String>> personEntry = getPersonAliases(s);
if(!map.containsKey(personEntry.getKey())){
map.put(personEntry.getKey(), personEntry.getValue());
}
return map.get(personEntry.getKey());
}
@Override
public Map<String, ArrayList> loadAll(
Iterable<? extends String> keys) throws Exception {
Map<String, ArrayList> localTempMap = new HashMap<>();
Stream keyStream = StreamSupport.stream(entries.spliterator(), true);
keyStream.forEach(key -> {
localTempMap.putIfAbsent(
getterExample(key).getKey(),
getterExample(key).getValue());
});
map.putAll(localTempMap);
return localTempMap;
}
.
.
.
그건 완전히 이해가됩니다. 저는 Java로 캐싱하기가 비교적 쉽습니다. 이전 경험은 C와 C++에서만 가능했기 때문에 약간의 오해가 있었기 때문에 운이 좋았습니다. – Wes