Java에서 처음부터 LRU 캐시 구현
Java에서 LRU(Least Recent Used) 캐시를 처음부터 구현하는 것은 데이터 구조와 동시성을 이해합니다. EHCache 및 OSCache와 같은 라이브러리는 작업을 단순화하지만 자신만의 라이브러리를 만들면 기본 메커니즘에 대한 통찰력을 얻을 수 있습니다.
멀티 스레드 환경의 경우 LinkedHashMap은 삽입 순서를 유지하면서 지속적인 액세스를 제공하는 강력한 경쟁자로 부상합니다. 그러나 Java의 표준 LinkedHashMap은 스레드로부터 안전하지 않기 때문에 일반적인 접근 방식은 Collections#synchronizedMap을 사용하여 이를 래핑하는 것입니다.
동시 데이터 구조 활용
LinkedHashMap을 동기화하는 동안 안정적인 솔루션을 제공하고 최신 동시 데이터 구조는 잠재적인 개선을 제공합니다. ConcurrentHashMap을 확장하고 LinkedHashMap에서 사용하는 로직을 복제하면 동시성 LRU 캐시를 만들 수 있습니다.
그러나 당분간은 입증된 LinkedHashMap과 Collections#synchronizedMap의 조합을 고수하는 것이 좋습니다. 원하는 경우 나중에 ConcurrentHashMap을 확장하여 동시성을 향상할 수도 있습니다.
구현 스니펫
다음은 LinkedHashMap 및 동기화를 사용하는 현재 구현의 요지입니다.
<code class="java">private class LruCache<A, B> extends LinkedHashMap<A, B> { private final int maxEntries; public LruCache(final int maxEntries) { super(maxEntries + 1, 1.0f, true); this.maxEntries = maxEntries; } @Override protected boolean removeEldestEntry(final Map.Entry<A, B> eldest) { return super.size() > maxEntries; } } Map<String, String> example = Collections.synchronizedMap(new LruCache<String, String>(CACHE_SIZE));</code>
위 내용은 Java에서 스레드로부터 안전한 LRU 캐시를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!