복붙노트

[SPRING] Spring CaffeineCacheManager에 여러 개의 카페인로드 캐시가 추가되었습니다.

SPRING

Spring CaffeineCacheManager에 여러 개의 카페인로드 캐시가 추가되었습니다.

몇 가지 고유 한 LoadingCache를 Spring CacheManager에 추가하려고하지만 CaffeCacheManager를 사용하여 이것이 어떻게 가능한지는 알 수 없습니다. 콘텐츠를 새로 고치는 데는 하나의 로더 만 가능하지만 각 캐시마다 별도의 로더가 필요합니다. Spring 캐시 관리자에 여러 개의로드 캐시를 추가 할 수 있습니까? 그렇다면 어떻게됩니까?

CaffeineCacheManager cacheManage = new CaffeineCacheManager();

LoadingCache<String, Optional<Edition>> loadingCache1 = 
            Caffeine.newBuilder()
            .maximumSize(150)
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .build(test -> this.testRepo.find(test));

LoadingCache<String, Optional<Edition>> loadingCache2 = 
            Caffeine.newBuilder()
            .maximumSize(150)
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .build(test2 -> this.testRepo.find2(test2));

// How do I add to cache manager, and specify a name?

해결법

  1. ==============================

    1.가능합니다. 모든 캐시를 미세 조정해야하므로 직접 정의하는 것이 좋습니다. 예제로 돌아 가면 다음 단계가됩니다.

    가능합니다. 모든 캐시를 미세 조정해야하므로 직접 정의하는 것이 좋습니다. 예제로 돌아 가면 다음 단계가됩니다.

    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(
        new CaffeineCache("first", loadingCache1),
        new CaffeineCache("second", loadingCache2)));
    

    그런 다음 평상시와 같이 사용할 수 있습니다.

    @Cacheable("first")
    public Foo load(String id) { ... }
    

    Spring Boot를 사용한다면, 개별 캐시를 bean (org.springframework.cache.Cache 구현체)으로 노출하면 우리는이를 감지하고 자동으로 SimpleCacheManager를 생성 할 것입니다.

    이 전략을 사용하면 다른 구현으로 캐시 추상화를 사용할 수 있습니다. 먼저 카페인 캐시가 될 수 있고 다른 공급자의 캐시가 될 수 있습니다.

  2. from https://stackoverflow.com/questions/44507309/multiple-caffeine-loadingcaches-added-to-spring-caffeinecachemanager by cc-by-sa and MIT license