Spring Framework는 캐시 관리자 Caffeine을 제공합니다.

설명하다

Spring Framework는 Caffeine이라는 캐시 관리자를 제공합니다. Caffeine은 대규모 캐시 데이터를 처리하는 데 널리 사용되는 Java 기반 고성능 캐싱 라이브러리입니다.

캐싱 기능은 Caffeine 캐시 관리자를 사용하여 Spring 애플리케이션에 쉽게 추가할 수 있습니다. 다음과 같은 주요 기능을 제공합니다.

  1. 빠른 응답: Caffeine은 메모리를 캐시 스토리지로 사용하여 기존 디스크 또는 네트워크 스토리지보다 더 빠르게 캐시 읽기 및 쓰기 작업에 응답할 수 있습니다.
  2. 고성능: Caffeine은 시간 및 액세스 빈도에 따른 캐시 제거 전략과 같은 다양한 최적화 전략을 채택하여 고성능 캐시 액세스를 보장합니다.
  3. 강력한 기능: Caffeine은 최대 용량, 만료 시간, 캐시 로딩 전략 등 다양한 캐시 구성 옵션을 제공합니다. 데이터의 비동기 로드 및 제거 전략도 지원됩니다.
  4. 스레드 안전: Caffeine은 다중 스레드 환경에서 동시 캐시 액세스를 처리할 수 있는 스레드 안전 메커니즘을 구현합니다.

Spring 애플리케이션에서 Caffeine 캐시 관리자를 사용하려면 먼저 해당 종속성을 추가해야 합니다. 예를 들어 Maven 프로젝트에서 다음과 같은 방식으로 Caffeine 종속성을 추가할 수 있습니다.

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>

그런 다음 Spring 구성 파일에서 Caffeine 캐시 관리자를 구성합니다. 예를 들어:

@Configuration
publicclass CacheConfig{
    
    

	@Bean
	publicCacheManagercacheManager(){
    
    
		CaffeineCacheManagercacheManager=newCaffeineCacheManager();
		cacheManager.setCaffeine(Caffeine.newBuilder()
		.expireAfterWrite(10,TimeUnit.MINUTES)
		.maximumSize(100));
		returncacheManager;
	}
}

위의 구성은 Caffeine을 사용하여 구현된 "cacheManager"라는 캐시 관리자를 생성하고 최대 캐시 항목 수를 100으로 설정하고 만료 시간을 10분으로 설정합니다.

이제 애플리케이션에서 @Cacheable, @CachePut 등과 같은 주석을 사용하여 캐시해야 하는 메서드를 표시할 수 있습니다. Spring은 Caffeine 캐시 관리자를 사용하여 캐시를 생성하고 관리합니다. 예를 들어:

@Service
publicclass MyService{
    
    

	@Cacheable("myCache")
	publicStringgetFromCache(Stringkey){
    
    
		// 从数据库或其他数据源获取数据
		returndata;
	}
}

위의 예에서 "myCache"라는 캐시는 @Cacheable 주석으로 표시됩니다. "getFromCache" 메서드가 호출될 때마다 Spring은 먼저 캐시에서 데이터를 가져오려고 시도하고 캐시에 데이터가 없으면 데이터 소스에서 데이터를 가져와 캐시합니다.

Caffeine 캐시 관리자를 사용하면 애플리케이션 성능을 개선하고, 기본 데이터 소스에 대한 액세스 수를 줄이고, 더 빠른 응답 시간을 제공할 수 있습니다.

원칙 캐싱 전략

Caffeine은 Spring Framework에서 캐시 관리자로 제공되는 고성능 Java 캐싱 라이브러리입니다. 그 원칙에는 다음과 같은 측면이 포함됩니다.

  1. 캐시 데이터 구조: Caffeine은 해시 테이블 기반 데이터 구조를 사용하여 캐시 항목을 저장합니다. 내부적으로 해시 테이블과 이중 연결 목록을 사용하므로 캐시 항목의 삽입, 삭제 및 조회 작업이 일정한 시간에 수행될 수 있습니다.
  2. 캐시 제거 전략: Caffeine은 크기, 시간 및 액세스 빈도를 기반으로 하는 것과 같은 여러 캐시 제거 전략을 지원합니다. 최대 용량, 만료 시간 및 최대 유휴 시간과 같은 매개변수를 설정하여 캐시 항목의 제거 동작을 제어할 수 있습니다. 캐시가 용량 제한에 도달하거나 캐시 항목이 만료되면 Caffeine은 특정 정책에 따라 가장 적게 사용되거나 만료된 캐시 항목을 제거합니다.
  3. 캐시 로딩 전략: Caffeine은 데이터를 비동기식으로 로딩하는 기능도 지원합니다. Caffeine은 캐시에서 존재하지 않는 캐시 항목을 가져올 때 데이터를 로드하는 메커니즘을 제공합니다. 캐시 항목의 데이터는 커스텀 로더를 통해 비동기적으로 로드되어 캐시에 저장될 수 있습니다. 이렇게 하면 동일한 데이터를 반복적으로 로드하는 동시 요청을 방지하고 시스템의 동시 처리 기능을 향상시킬 수 있습니다.
  4. 캐시 읽기 및 쓰기 프로세스: 애플리케이션이 캐시된 데이터를 가져와야 하는 경우 먼저 Caffeine 캐시에서 해당 캐시 항목을 찾으려고 시도합니다. 항목이 캐시에 있으면 캐시된 데이터가 직접 반환됩니다. 캐시에 항목이 없으면 캐시 로딩 정책에 따라 비동기 또는 동기로 데이터를 로드하여 캐시에 저장합니다. 캐시 쓰기 프로세스 중에 만료되거나 크기가 큰 캐시 항목도 구성된 캐시 제거 전략에 따라 제거됩니다.
  5. 스레드 안전성: Caffeine은 스레드로부터 안전하며 내부적으로 동시 데이터 구조를 사용하여 동시 캐시 액세스를 처리합니다. 이렇게 하면 다중 스레드 환경의 캐시 작업이 데이터 불일치나 충돌을 일으키지 않도록 할 수 있습니다.

일반적으로 Caffeine은 Spring Framework의 캐시 관리자로서 고성능의 유연한 캐싱 기능을 제공합니다. 다양한 전략과 매개변수를 구성하여 다양한 시나리오에서 캐시 요구 사항을 충족하고 애플리케이션에서 빠르고 안정적인 캐시 액세스 기능을 제공할 수 있습니다.

해시 테이블

해시 테이블(Hash table)은 일정한 시간 조회 속도를 제공할 수 있는 해시 함수(Hash function) 기반의 데이터 구조이다. 이는 해시 테이블이 내부적으로 배열을 사용하여 데이터를 저장하고 해시 함수를 통해 키를 배열 인덱스에 매핑하기 때문입니다.

해시 함수는 키를 해시 코드로 변환한 다음 배열 크기를 모듈로 사용하여 배열에서 키의 인덱스 위치를 결정합니다. 따라서 해시 테이블에서 요소를 조회할 때 키의 해시 코드를 계산하고 배열의 해당 인덱스 위치에 직접 액세스하면 됩니다.

정시간 조회 속도는 주로 다음과 같은 이유 때문입니다.

  1. 해시 함수의 균일한 분포: 우수한 해시 함수는 키를 배열 인덱스에 고르게 매핑합니다. 이렇게 하면 배열에서 더 많은 요소의 충돌을 피할 수 있으므로 검색의 시간 복잡도를 줄일 수 있습니다.
  2. 배열의 임의 액세스: 배열은 연속적인 메모리 구조이며 메모리의 저장소에는 연속적인 위치가 할당됩니다. 배열의 인덱스는 순차적으로 증가하기 때문에 주어진 인덱스 위치에 대해 간단한 주소 계산으로 요소의 위치를 ​​얻을 수 있습니다. 따라서 배열의 요소는 일정한 시간에 인덱스로 직접 액세스할 수 있습니다.
  3. 충돌 처리 방법: 해시 함수가 요소 간의 충돌을 줄일 수 있지만 실제 응용 프로그램에서 충돌을 완전히 피할 수는 없습니다. 충돌을 해결하기 위해 해시 테이블은 일반적으로 체인 주소 방법(Chaining), 개방 주소 지정 방법(Open addressing) 등과 같은 몇 가지 충돌 해결 방법을 사용합니다. 이러한 방법은 충돌을 효율적으로 처리하고 일정한 시간 조회 속도를 유지합니다.

해시 테이블의 검색 속도는 일정한 시간이지만 최악의 경우 해시 함수에서 더 많은 충돌이 발생하여 검색 성능이 저하될 수 있음을 유의해야 합니다. 따라서 해시 함수를 설계하고 충돌 전략을 다룰 때 충돌 가능성을 최대한 최소화하는 것이 해시 테이블의 고성능을 유지하는 데 필요하다.

해시 데이터 구조 예

해시 테이블은 공통 데이터 구조이며 HashMap 클래스를 사용하여 Java 언어로 해시 테이블을 구현할 수 있습니다. 다음은 해시 테이블 데이터 구조와 일정한 쿼리 속도의 예를 보여주는 간단한 Java 코드 그림입니다.

importjava.util.HashMap;

publicclass HashTableExample{
    
    
	publicstaticvoidmain(String[]args){
    
    
		// 创建一个哈希表
		HashMap<String,Integer>hashMap=newHashMap<>();
		
		// 向哈希表中插入数据
		hashMap.put("Alice",25);
		hashMap.put("Bob",30);
		hashMap.put("Charlie",35);
		
		// 查询元素
		Stringkey="Bob";
		if(hashMap.containsKey(key)){
    
    
		intvalue=hashMap.get(key);
		System.out.println(key+": "+value);
		}else{
    
    
		System.out.println("Key not found");
		}
	}
}

위의 예에서는 먼저 HashMap 객체를 해시 테이블로 생성했습니다. 그런 다음 put 메소드를 사용하여 해시 테이블에 데이터를 삽입하십시오. 각 데이터 항목에는 키와 해당 값이 있습니다.

다음으로 지정된 키를 통해 해시 테이블의 값을 쿼리하고 containsKey 메서드를 사용하여 키가 있는지 여부를 확인하고, 키가 있으면 get 메서드를 사용하여 해당 값을 가져와서 출력합니다. 키가 없으면 프롬프트 메시지를 출력합니다.

HashMap 클래스에 의해 구현된 해시 테이블을 사용하여 요소를 일정한 시간에 쿼리할 수 있습니다. HashMap은 내부적으로 해시 함수를 사용하여 키를 배열 인덱스에 매핑하고 검색 작업은 하나의 해시 계산과 하나의 배열 액세스만 거치면 되기 때문에 매우 효율적입니다.

일정한 쿼리 속도를 유지하기 위해 해시 테이블의 성능은 해시 함수의 품질, 해시 충돌의 처리 전략 등과 같은 몇 가지 요인의 영향도 받는다는 점에 유의해야 합니다. 따라서 실제 응용 프로그램에서는 적절한 해시 함수를 선택하고 요구 사항에 따라 적절한 해시 테이블 구현 클래스를 선택해야 합니다.

영구 캐시

Caffeine은 고성능 캐싱 기능을 제공하기 위해 주로 사용되는 메모리 기반 캐싱 라이브러리입니다. 영구 저장 기능이 없습니다. 즉, 서비스가 중단되면 캐시의 데이터가 손실됩니다.

서비스가 중단된 후 캐시된 데이터를 저장해야 하는 경우 Redis 캐시 관리자와 같은 영구 스토리지를 지원하는 다른 캐시 관리자를 사용할 수 있습니다. Spring Framework는 Redis와 통합된 캐시 관리자를 제공하여 영구 캐시를 달성하기 위해 Redis 데이터베이스에 캐시된 데이터를 저장할 수 있습니다.

Redis 캐시 관리자를 구성하여 Spring 애플리케이션은 Redis에 캐시된 데이터를 저장할 수 있으며 서비스가 다시 시작된 후에도 여전히 Redis에서 이전에 캐시된 데이터를 가져올 수 있습니다.

한 손

데이터 액세스 속도가 중요한 세상에서 Spring Framework라는 강력한 도구가 있었습니다. 이를 통해 소프트웨어 개발자는 카페인으로 알려진 신비한 물질의 힘을 활용할 수 있었습니다.

카페인은 데이터를 빠르게 저장하고 검색할 수 있는 마법의 약과 같아서 애플리케이션을 더 빠르고 원활하게 실행합니다. 마치 소프트웨어의 서로 다른 부분 사이에서 정보를 순간적으로 텔레포트할 수 있는 힘을 가진 것과 같았습니다.

Spring의 Cache Manager 덕분에 개발자는 Caffeine의 기능을 쉽게 활용하고 이를 사용하여 애플리케이션을 더 빠르고 효율적으로 만들 수 있습니다. 소프트웨어 개발 무기고에 비밀 무기가 있는 것과 같았습니다.

Caffeine과 Spring을 사용하여 소프트웨어를 지속적으로 혁신하고 최적화하면서 애플리케이션이 새로운 차원의 속도와 성능에 도달하는 것을 보았습니다. 그들은 카페인이 곁에 있으면 어떤 어려움도 극복할 수 있다는 것을 알고 있었습니다.

おすすめ

転載: blog.csdn.net/weixin_38233104/article/details/131978370