최신 애플리케이션 개발에서는 성능과 확장성이 시스템의 성패를 결정하는 핵심 요소입니다. 캐싱은 데이터베이스 로드를 줄이고 대기 시간을 줄이며 원활한 사용자 경험을 보장함으로써 이를 개선하는 데 중요한 역할을 합니다. 그러나 모든 시나리오에 완벽한 단일 캐싱 솔루션은 없습니다.
로컬 캐시(예: Caffeine)는 메모리에서 실행되고 애플리케이션에 가깝기 때문에 엄청나게 빠른 속도를 제공합니다. 자주 액세스하는 데이터에 대한 응답 시간을 줄이는 데 유용합니다. 반면에 분산 캐시(예: Redisson의 Redisson)는 애플리케이션의 여러 인스턴스에 걸쳐 확장성과 일관성을 제공합니다. 분산 캐싱은 분산 시스템의 모든 노드가 동일한 최신 데이터에 액세스할 수 있도록 보장하며 이는 다중 노드 환경에서 매우 중요합니다. 그러나 로컬 또는 분산 캐싱에만 의존하면 다음과 같은 문제가 발생할 수 있습니다.
이 효과적인 솔루션이 됩니다. Caffeine과 Redisson을 사용하여 로컬 캐싱과 분산 캐싱의 장점을 결합함으로써 분산 캐싱 섹스로 일관성과 확장성을 유지하면서 로컬 캐싱 속도의 높은 성능을 얻을 수 있습니다. 이 기사에서는 최적의 성능과 데이터 일관성을 보장하기 위해 Spring Boot 애플리케이션에서 하이브리드 캐싱을 구현하는 방법을 살펴봅니다.
구현 단계
pom.xml
<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>
을 사용하여 메모리 내 캐싱을 활성화하고 CacheManager
을 통해 만료 정책을 구성합니다. CaffeineCacheManager
Caffeine
2. 캐시 리졸버
는 로컬(Caffeine) 캐시와 분산(Redisson) 캐시를 연결하여 하이브리드 전략이 효과적으로 적용되도록 합니다. CacheResolver
LocalCacheResolver
<code class="language-java">@Component public class LocalCacheResolver implements CacheResolver { // ... (代码与原文相同) ... }</code>
<code class="language-java">public class LocalCache implements Cache { // ... (代码与原文相同) ... }</code>
<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>
로 배출됩니다
@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>
<code class="language-java">@Component public class LocalCacheResolver implements CacheResolver { // ... (代码与原文相同) ... }</code>
위 내용은 Spring Boot의 하이브리드 캐시 전략 : Redisson 및 Caffeine 통합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!