> Java > java지도 시간 > Spring Boot의 하이브리드 캐시 전략 : Redisson 및 Caffeine 통합 가이드

Spring Boot의 하이브리드 캐시 전략 : Redisson 및 Caffeine 통합 가이드

Linda Hamilton
풀어 주다: 2025-01-26 04:04:12
원래의
194명이 탐색했습니다.

효율적인 캐싱 전략: Spring Boot 애플리케이션의 하이브리드 캐싱

최신 애플리케이션 개발에서는 성능과 확장성이 시스템의 성패를 결정하는 핵심 요소입니다. 캐싱은 데이터베이스 로드를 줄이고 대기 시간을 줄이며 원활한 사용자 경험을 보장함으로써 이를 개선하는 데 중요한 역할을 합니다. 그러나 모든 시나리오에 완벽한 단일 캐싱 솔루션은 없습니다.

로컬 캐시(예: Caffeine)는 메모리에서 실행되고 애플리케이션에 가깝기 때문에 엄청나게 빠른 속도를 제공합니다. 자주 액세스하는 데이터에 대한 응답 시간을 줄이는 데 유용합니다. 반면에 분산 캐시(예: Redisson의 Redisson)는 애플리케이션의 여러 인스턴스에 걸쳐 확장성과 일관성을 제공합니다. 분산 캐싱은 분산 시스템의 모든 노드가 동일한 최신 데이터에 액세스할 수 있도록 보장하며 이는 다중 노드 환경에서 매우 중요합니다. 그러나 로컬 또는 분산 캐싱에만 의존하면 다음과 같은 문제가 발생할 수 있습니다.

    로컬 캐시
  • 는 노드 간에 데이터 업데이트가 동기화되지 않기 때문에 분산 환경에서 일관성이 떨어질 수 있습니다.
  • 분산 캐시
  • 는 약간의 네트워크 지연 시간을 발생시키며 이는 매우 낮은 지연 시간 시나리오에 적합하지 않을 수 있습니다.
  • 여기서
하이브리드 캐싱

이 효과적인 솔루션이 됩니다. CaffeineRedisson을 사용하여 로컬 캐싱과 분산 캐싱의 장점을 결합함으로써 분산 캐싱 섹스로 일관성과 확장성을 유지하면서 로컬 캐싱 속도의 높은 성능을 얻을 수 있습니다. 이 기사에서는 최적의 성능과 데이터 일관성을 보장하기 위해 Spring Boot 애플리케이션에서 하이브리드 캐싱을 구현하는 방법을 살펴봅니다.

Hybrid Cache Strategy in Spring Boot: A Guide to Redisson and Caffeine Integration구현 단계

1단계: 종속성 추가

먼저

파일에 필요한 종속성을 추가합니다.

pom.xml

2단계: 캐시 구성
<code class="language-xml"><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.43.0</version>
</dependency></code>
로그인 후 복사
로그인 후 복사

캐시 구성은 다음과 같습니다.

주요 구성품에 대한 자세한 설명
<code class="language-java">@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Value("${cache.server.address}")
    private String cacheAddress;

    @Value("${cache.server.password}")
    private String cachePassword;

    @Value("${cache.server.expirationTime:60}")
    private Long cacheExpirationTime;

    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress(cacheAddress).setPassword(cachePassword.trim());
        config.setLazyInitialization(true);
        return Redisson.create(config);
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(cacheExpirationTime, TimeUnit.MINUTES));
        return cacheManager;
    }

    @Bean
    public CacheEntryRemovedListener cacheEntryRemovedListener() {
        return new CacheEntryRemovedListener(cacheManager());
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new LocalCacheResolver(cacheManager(), redisson(), cacheEntryRemovedListener());
    }
}</code>
로그인 후 복사
로그인 후 복사

1. 캐시 관리자(CacheManager)

은 캐시 수명 주기를 관리하고 적절한 캐시 구현(예: 로컬 또는 분산)에 대한 액세스를 제공하는 일을 담당합니다. 이 예에서는

을 사용하여 메모리 내 캐싱을 활성화하고 CacheManager을 통해 만료 정책을 구성합니다. CaffeineCacheManager Caffeine2. 캐시 리졸버

특정 작업에 사용할 캐시를 동적으로 결정합니다. 여기서

는 로컬(Caffeine) 캐시와 분산(Redisson) 캐시를 연결하여 하이브리드 전략이 효과적으로 적용되도록 합니다. CacheResolver LocalCacheResolver

<code class="language-java">@Component
public class LocalCacheResolver implements CacheResolver {
    // ... (代码与原文相同) ...
}</code>
로그인 후 복사
로그인 후 복사
3. 캐시 항목 제거 리스너(CacheEntryRemovedListener)
<code class="language-java">public class LocalCache implements Cache {
    // ... (代码与原文相同) ...
}</code>
로그인 후 복사

분산 캐시(Redis)에서 제거되는 항목을 수신 대기하고 해당 항목이 각 노드의 로컬 캐시에서도 제거되는지 확인하여 일관성을 유지합니다.

<code class="language-xml"><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.43.0</version>
</dependency></code>
로그인 후 복사
로그인 후 복사
하이브리드 캐시 워크 플로우 캐시 기사가 추가됩니다 주석 메소드가 실행되면

메소드가 호출됩니다. 이것은 로컬 캐시 및 분산 캐시 (redis)에 데이터를 저장합니다.

캐시 기사 획득

데이터를 검색하기 위해 시스템은 먼저 로컬 캐시에 키가 존재하는지 확인합니다. 키를 찾을 수 없으면 분산 캐시를 쿼리하십시오. 이 값이 분산 캐시에 존재하는 경우 로컬 캐시에 추가하여 팔로우 방문을 더 빠르게 방문하십시오.

캐시 막대는

로 배출됩니다 캐시가 추출되면 (예 : 주석을 통해) 키는 분산 캐시에서 제거됩니다. 다른 노드의 로컬 캐시는 동일한 키를 제거하기 위해 @Cacheable에 의해 알림을받습니다. put

요약 혼합 캐시는 로컬 메모리 캐시의 속도와 분산 캐시의 확장 성과 일관성을 결합합니다. 이 방법은 로컬 또는 분산 캐시의 한계를 해결합니다. 스프링 부팅 애플리케이션에서
<code class="language-java">@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Value("${cache.server.address}")
    private String cacheAddress;

    @Value("${cache.server.password}")
    private String cachePassword;

    @Value("${cache.server.expirationTime:60}")
    private Long cacheExpirationTime;

    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress(cacheAddress).setPassword(cachePassword.trim());
        config.setLazyInitialization(true);
        return Redisson.create(config);
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(cacheExpirationTime, TimeUnit.MINUTES));
        return cacheManager;
    }

    @Bean
    public CacheEntryRemovedListener cacheEntryRemovedListener() {
        return new CacheEntryRemovedListener(cacheManager());
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new LocalCacheResolver(cacheManager(), redisson(), cacheEntryRemovedListener());
    }
}</code>
로그인 후 복사
로그인 후 복사
카페인

redisson 를 통합하면 상당한 성능 향상을 달성하고 응용 프로그램 노드 간의 데이터 일관성을 보장 할 수 있습니다. 및 및
<code class="language-java">@Component
public class LocalCacheResolver implements CacheResolver {
    // ... (代码与原文相同) ...
}</code>
로그인 후 복사
로그인 후 복사
를 사용하면 Altoscopic 스트립이 모든 캐시 레이어간에 동기화되도록하고 현대적인 확장 가능한 응용 프로그램을위한 효율적이고 신뢰할 수있는 캐시 전략을 제공 할 수 있습니다. 이 하이브리드 방법은 분산 시스템에서 특히 가치가 있습니다. 이러한 시스템에서는 성능과 일관성이 중요하기 때문입니다.

위 내용은 Spring Boot의 하이브리드 캐시 전략 : Redisson 및 Caffeine 통합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿