English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SpringBoot 프레임워크는 다양한 캐시 제공자예를 들어 EhCache, Redis, Hazelcast, Infinispan, Caffeine,와 같은. 캐시 제공자는 개발자가 응용 프로그램에서 투명하고 명시적으로 캐시를 구성할 수 있도록 합니다. 우리는 캐시를 사용해야 합니다.因为它减少了执行次数并提高了应用程序的性能。
Spring에서 구동할 때, 캐시 추상화는 실제 캐시 공간을 제공하지 않습니다. 이는 다음과 같습니다. org.springframework.cache.Cache 또는 org.springframework.cache.CacheManager 인터페이스에서 발생하는 추상화.
Spring Boot Framework는 자동 구성을 통해 캐시 구현을 간소화합니다. 그것은 라이브러리와 설정 파일을 클래스 경로에서 검색하고 응용 프로그램 시작 시 필요한 의존성 Bean을 초기화합니다. 캐시 자동 구성은 다음 단계를 포함합니다:
설정 파일에 애노테이션 추가 @EnableCaching 。 클래스 경로에 필요한캐시 라이브러리。 클래스 경로의 루트 디렉토리에 캐시 제공자에 추가설정 파일。
예를 들어, 우리가 응용 프로그램에서 구현하려는 경우 EhCache 을 통해, 먼저 설정 파일에서 캐시를 활성화합니다.
@SpringBootApplication @EnableCaching public class Employee { @Bean public CacheManager cacheManager() { //some code } }
에서 pom.xml 파일에 추가 EhCache 의존성.
<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
마지막으로, 캐시 제공자 설정 파일을 설정합니다. 여기서 우리는 EhCache를 사용하고 있으므로 클래스 경로의 루트 디렉토리에 설정해야 합니다 ehcache.xml 文件。
当我们没有定义 CacheManager 또는 CacheResolver ,Spring Boot Framework는 다음缓存 제공자를 검사하려고 시도합니다:
Generic JCache EhCache Hazelcast Infinispan Couchbase Redis를 구성할 때, 자동으로 구성됩니다 Caffeine Simple
如果Spring Boot在类路径中找到多个缓存提供程序,则在这种情况下,我们必须在 만약 Spring Boot가 클래스 패스에 여러 개의 캐시 제공자를 찾으면, 이 경우에는 이를 위해 반드시 application.properties
application.properties 파일에서 명확하게 캐시 제공자를 지정할 수 있습니다. spring.cache.ehcache.config=classpath:config/spring.cache.ehcache.provider=net.sf.ehcache.CacheManager-config.xml
another spring.cache.type 특정 속성을 사용하여 설정할 수 있습니다.
spring.cache.type=none
Spring Boot Framework는 애플리케이션에 기본 캐시 의존성을 추가하는 스타트업 의존성을 제공합니다. 기본적으로, 스타트업 캐시 의존성은 특정 환경에서 캐시를 비활성화할 수 있는 설정을 제공합니다. spring-context-support 의존성.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.3.RELEASE</version> </dependency>
Spring Boot Framework는 CacheManager를 자동 설정하며, 이를 구현하여 CacheManagerCustomizer 인터페이스는 이를 추가로 커스터마이징합니다.
다음 예제에서, 우리는 전달 표시기 메인 매핑의 null 값을 설정했습니다.
@Bean public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() { return new CacheManagerCustomizer<ConcurrentMapCacheManager>() { @Override public void customize(ConcurrentMapCacheManager cacheManager) { cacheManager.setAllowNullValues(false); } }; }
위의 bean은 자동 설정된 ConcurrentMapCacheManager ConcurrentMapCacheManager가 자동 설정되지 않으면, 커스터마이저는 어떤 방식으로도 호출되지 않습니다. 우리는 어떤 양의 커스터마이저를 사용할 수 있으며, 애노테이션을 사용할 수 있습니다. @Order 또는 @Ordered.
스프링-context-support는 최소한 하나의 org.springframework.cache.Cache.Cache bean이 일반 캐시를 사용하도록 설정됩니다. CacheManager 捆绑되고 모든 bean이 구성되었습니다.
JCache는 javax.cache.spi.CachingProvider캐시는 클래스 경로에 있는 JSR 107에 있습니다. spring-boot-starter-cache가 제공하는 JCacheCacheManager우리는 다른 어떤 캐시 라이브러리도 추가할 수 있습니다.
EHCache는 Java를 기반으로 한 오픈 소스이며 널리 사용됩니다. EhCache를 사용하려면 다음 의존성을 사용해야 합니다.
<dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency>
EhCache를 구성하는 방법은 두 가지가 있습니다:
먼저, 모든 구성 매개변수가 EhCache API를 통해 구성된 Java POJO 파일을 통해 설정합니다. 또한, 제공된 아키텍처 정의를 기반으로 XML 파일을 구성하여 EhCache를 설정할 수 있습니다.
EhCache는 이름이 ehcache.xml 파일입니다. 응용 프로그램이 클래스 경로에서 파일을 찾았다면 spring-boot-starter-cache가 제공하는 EhCacheCacheManager 다음 속성을 사용하여 XML 파일을 구성할 수 있습니다:
spring.cache.ehcache.config=classpath:config/demo-config.xml
캐시를 응용 프로그램에서 활성화하면, Spring Boot는 자동으로 다음을 포함한 Hazelcast를 포함합니다: HazelcastInstance CacheManager에 포장됩니다. 그것은 노드 간에 데이터를 평균적으로 분배합니다. 우리는 다음 속성을 사용하여 Hazelcast를 구성할 수 있습니다.
spring.hazelcast.config=classpath:config/demo-hazelcast.xml
이 속성이 설정되지 않았다면, Spring Boot는 클래스 경로에서 찾으려고 시도합니다: hazelcast.xml (Hazelcast 설정) 파일입니다.
Infinispan은 내장된 Java 라이브러리입니다. 그것은 다음과 같이 사용됩니다: 캐시또는 데이터 그리드로 키밸류형식으로 저장된 데이터입니다. JCache, JPA Quarkus, Spring 등과 쉽게 연동할 수 있습니다.
기본 파일 위치가 없으므로 명확히 지정해야 합니다. 명확히 지정하지 않으면 기본 런처를 사용합니다.
spring.cache.infinispan.config=infinispan.xml
Couchbase를 구현할 때, 자동으로 구성됩니다 couchbase-spring-cache Couchbase를 구성할 때, 자동으로 구성됩니다 CouchebaseCacheManager 에서 모든 캐시와 관련된 작업이 수행됩니다. Bucket 에서 실행됩니다. 속성을 설정하여 캐시를 통제할 수 있습니다. spring.cache.cache-이름으로 다른 캐시를 생성할 수 있습니다(필요 시).
커스터마이즈된 프로그램은 다른 스토리지 버킷을 생성할 수 있으며, 그 안에 다른 캐시를 생성할 수 있습니다.
이상의 개념을 이해하기 위해 예제를 통해 설명해 보겠습니다.
을 가진 캐시가 필요하다면, 만약 우리가 세 개의 이름이 cacheA ،과 cacheB, cacheC4cacheA와 cacheB는 메인 스토리지 버킷(즉, 자동으로 구성된 버킷)에 위치합니다. cacheC는 다른 버킷에 있으며, 그 버킷은 몇 초 동안 존재할 수 있습니다. 예를 들어
spring.cache.cache-names=cacheA, cacheB
초. 따라서 속성을 지정하여 cacheA와 cacheB를 생성할 수 있습니다. 예를 들어: Redis를 구성할 때, 자동으로 구성됩니다 Redis 을 사용할 때, 자동으로 구성됩니다 RedisCacheManager spring.cache.cache-를 사용할 수 있습니다. names 다른 캐시를 생성할 수 있습니다. 속성* spring.cache.redis.
그렇다면 기본 설정을 구현할 수 있습니다. RedisCacheConfiguration 기본 설정을 완전히 제어할 수 있습니다. 강조.
spring.cache.cache-names=cacheA, cacheB spring.cache.redis.time-to-live=100000
위 속성은 두 개의 캐시를 구성했습니다. 각각 cacheA와 cacheB로, 그들의 수명은10분.
카페인은 Java 기반의 캐시 라이브러리입니다. 또한 메모리 내 캐시를 제공합니다. 만약 spring-boot-starter-cache 의존성이 클래스 패스에서 카페인을 찾아 자동으로 구성됩니다 CaffeineCacheManger 어플리케이션에서 카페인을 사용하려면 다음 의존성을 추가해야 합니다:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.7.0</version> </dependency>
카페인 캐시를 통해 우리는 속성을 사용할 수 있습니다. spring.cache.caffeine.spec은 캐시의크기과생존 시간。 例如:
spring.cache.cache-names=cacheA,cacheB spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
위의 설정은 cache로 이름을 두는 두 개의 캐시를 생성합니다.1와 cache2의 캐시입니다. 캐시의 최대 크기는 500 최장 유효 기간은 6 초.
이것은 기본 구현입니다.缓存 제공자가 지정되지 않았을 경우 ConcurrentHashMap 캐시 저장소로 설정.
例如,如果我们需要两个缓存,请使用设置它们的名称。以下属性:
spring.cache.cache-names=cache1,cache2
当我们使用注解@EnableCaching启用缓存时,应用程序需要合适的配置。当我们要在特定环境中 비활성화캐시 사용 시 우리는 속성을 사용합니다. 우리는 spring.cache.type 캐시 비활성화
spring.cache.type=none