내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Read Through 모드는 일반적으로 응용 프로그램이 데이터 읽기를 시도할 때 캐시 시스템을 먼저 검사하여 데이터가 이미 캐시에 있는지 확인하는 캐싱 전략을 나타냅니다. 데이터가 캐시에 존재하는 경우(즉, 캐시 적중) 캐시에서 직접 데이터를 읽어 애플리케이션에 반환합니다. 데이터가 캐시에 없으면(즉, 캐시 누락) 기본 데이터 저장소(예: 데이터베이스)에서 데이터를 읽은 다음 캐시에 로드하고 마지막으로 애플리케이션에 반환합니다.
이 모델의 주요 장점은 다음과 같습니다.
Read Through 모드는 일반적으로 Lazy Loading 및 Eager Loading과 같은 전략과 대조됩니다.
Read Through 모드를 구현할 때 다음 사항을 고려할 수 있습니다.
Spring Boot에서 Read Through 패턴을 구현하는 것은 일반적으로 Spring Cache 추상화를 통해 수행될 수 있습니다. Spring Cache는 다양한 캐시 구현에 걸쳐 통합 API를 제공하고 EhCache, Hazelcast, Infinispan, Redis 등과 같은 여러 캐시 솔루션을 지원합니다.
종속성 추가: 먼저 Spring Boot의 캐시 종속성과 선택한 캐시 구현 라이브러리(예: Redis)를 추가해야 합니다.
- <!-- Spring Boot Starter Cache -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-cache</artifactId>
- </dependency>
-
- <!-- 以Redis为例,添加Redis的Spring Boot Starter -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
캐시 주석 활성화:Spring Boot 구성 클래스에 추가@EnableCaching
캐시 주석 지원을 활성화하는 주석입니다.
캐시 관리자 구성: 하나 이상 구성CacheManager
, Spring Boot는 자동으로 간단한 구성을 구성합니다.CacheManager
하지만 필요한 경우 더 복잡한 캐싱 전략을 구성할 수 있습니다.
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.cache.RedisCacheConfiguration;
- import org.springframework.data.redis.cache.RedisCacheManager;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
-
- @Configuration
- public class RedisCacheConfig {
-
- @Bean
- public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
- RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
- .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string()))
- .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer.json())))
-
- Map<String, RedisCacheConfiguration> customCacheConfigs = new HashMap<>();
- customCacheConfigs.put("mySpecialCache",
- config.entryTtl(Duration.ofMinutes(15))); // 为特定缓存设置不同的过期时间
-
- .disableCachingNullValues();
- return RedisCacheManager.builder(connectionFactory)
- .cacheDefaults(config)
- // 在这里可以自定义添加缓存配置
- .withInitialCacheConfigurations(customCacheConfigs)
- .build();
- }
- }
@Cacheable
Read Through 모드를 구현하기 위한 주석입니다. 캐시에 데이터가 없으면 메서드가 호출되고 결과가 캐시됩니다.- import org.springframework.cache.annotation.Cacheable;
- import org.springframework.stereotype.Service;
-
- @Service
- public class MyService {
-
- @Cacheable(value = "myCache", key = "#id")
- public MyData getDataById(String id) {
- // 从数据库加载数据
- return myDataRepository.findById(id);
- }
- }
캐시 키:존재하다@Cacheable
캐시 키는 일반적으로 메소드 매개변수의 값을 기반으로 하는 주석에 지정됩니다.
캐시 이름: 서로 다른 캐시 도메인을 구별하는 데 사용될 캐시 이름을 지정합니다.
캐시 매개변수 구성: 필요에 따라 캐시 시간 초과, 조건, 제외 조건 등을 구성할 수 있습니다.
값 또는 캐시 이름 :캐시 이름을 지정합니다. 캐시를 저장하는 데 사용될 하나 이상의 캐시 이름을 지정할 수 있습니다.
@Cacheable(value = "myCacheName", key = "#id")
열쇠 : 캐시 키 값의 생성 전략을 정의합니다. SpEL 표현식(Spring Expression Language)은 일반적으로 메소드 매개변수를 캐시 키로 지정하는 데 사용됩니다.
@Cacheable(cacheNames = "myCache", key = "#id")
상태: 캐싱 조건을 정의하고, 조건이 충족되는 경우에만 캐싱합니다.
@Cacheable(cacheNames = "myCache", key = "#id", condition = "#id.length() > 3")
~하지 않는 한: 캐싱하지 않는 조건을 정의하고,condition
대신 특정 상황을 배제하는 데 사용됩니다.
@Cacheable(cacheNames = "myCache", key = "#id", unless = "#result == null")
키 생성기: 사용자 정의 캐시 키 생성 전략을 지정합니다. 더 복잡한 키 생성 논리가 필요한 경우KeyGenerator
콩 이름.
@Cacheable(cacheNames = "myCache", keyGenerator = "myKeyGenerator")
캐시매니저:사용할 것을 지정하십시오CacheManager
, 여러 개가 있는 경우CacheManager
사용될 때.
@Cacheable(cacheNames = "myCache", cacheManager = "myCacheManager")
쓰기 후 만료 : 캐시 항목이 작성된 후 만료 시간(밀리초)을 설정합니다. 이는 캐시된 데이터의 수명을 정의하기 위해 일반적으로 사용되는 구성입니다.
@Cacheable(cacheNames = "myCache", key = "#id", expireAfterWrite = 3600000) // 1小时后过期
액세스 후 만료: 캐시 항목의 마지막 접근 후 만료 시간을 설정합니다. 이는 캐시 데이터에 마지막으로 접근한 후의 시간에 적합합니다.
새로 고침 후 쓰기: 쓰기 후 캐시를 새로 고치는 기간을 설정합니다. 캐시가 동적으로 새로 고쳐지는 시나리오에 적합합니다.
동조: 동시 환경에서 경합 상태를 방지하기 위해 캐시 항목을 동기적으로 생성할지 여부를 설정합니다.
예외 처리: 애플리케이션의 안정성에 영향을 미치지 않도록 캐시 메서드에서 발생할 수 있는 예외를 처리해야 합니다.