[SPRING] 항목 / 엔티티 모음이있는 Spring 캐시
SPRING항목 / 엔티티 모음이있는 Spring 캐시
스프링 캐시 (Spring Cache)를 사용하여 키 집합을 전달하고 반환 값은 엔티티 목록입니다. 캐싱 프레임 워크에서 반환 목록의 각 요소가 해당 코드와 함께 캐시된다는 것을 이해하고 싶습니다. 현재 키가 전체 목록이며, 후속 호출에서 키가 누락 된 경우 전체 콜렉션을 다시로드하려고 시도합니다.
@Override
@Cacheable(value = "countries")
public List<Country> getAll(List<String>codes) {
return countryDao.findAllInCodes(codes);
}
또 다른 가능성은지도가 반환된다는 것입니다. 마찬가지로 이전에 쿼리 한 적이없는 항목에 대해서만 쿼리를 수행하고 키를 사용하여 각 항목을 캐시하는 데에도 지능적으로 캐시를 사용하고 싶습니다.
@Override
@Cacheable(value = "countries")
public Map<String,Country> getAllByCode(List<String>codes) {
return countryDao.findAllInCodes(codes);
}
국가 클래스가 다음과 같다고 가정 해 보겠습니다.
class Country{
String code;
String fullName;
long id;
... // getters setters constructurs etc..
}
스프링 캐쉬로 가능합니까?
해결법
-
==============================
1.사실, Spring의 Caching Abstraction을 사용하더라도 가능하지만 OOTB (Out-of-the-Box)는 가능하지 않습니다. 본질적으로 Spring의 캐싱 인프라 스트럭처를 커스터마이징해야한다 (아래에서 더 설명한다)
사실, Spring의 Caching Abstraction을 사용하더라도 가능하지만 OOTB (Out-of-the-Box)는 가능하지 않습니다. 본질적으로 Spring의 캐싱 인프라 스트럭처를 커스터마이징해야한다 (아래에서 더 설명한다)
디폴트로, Spring의 캐싱 인프라 스트럭처는 @Cacheable 메소드 매개 변수 전체를 캐시 "키"로 사용합니다. 물론 여기에서 설명하는 것처럼 SpEL 표현식이나 사용자 정의 KeyGenerator 구현을 사용하여 키 해상도를 사용자 정의 할 수도 있습니다.
하지만 @Cacheable 메서드의 반환 값과 함께 각 캐시 항목 (즉 배열 / 컬렉션 또는 Map을 기반으로하는 키 / 값 쌍)으로 매개 변수 인수의 컬렉션 또는 배열을 분해하지는 않습니다.
이를 위해서는 Spring의 CacheManager (캐싱 전략 / 제공자에 따라 다름)와 캐시 인터페이스의 맞춤 구현이 필요합니다.
이 게시물에 대한 예제 (약간)를 업데이트 / 정리했습니다.
이 예제는 스프링 프레임 워크 자체에서 제공되는 ConcurrentMapCacheManager를 확장하고 커스터마이징한다.
이론적으로 Spring Data Redis의 Redis, 여기 (소스), Spring Data GemFire의 Pivotal GemFire의 CacheManager (소스)와 같은 CacheManager 구현을 확장 / 사용자 정의 할 수있다. Pivotal GemFire의 오픈 소스 버전은 Apache Geode이며 해당 Spring Data Geode 프로젝트 (기본적으로 SD GemFire와 동일한 Spring Data Geode의 CacheManager 소스)가 있습니다. 물론이 기술을 다른 캐싱 공급자에게 적용 할 수 있습니다 ... Hazelcast, Ehcache 등
그러나, 작업의 실제적인 함축은 Spring의 Cache 인터페이스의 맞춤 구현 (또는 구체적으로 기본 클래스)에 의해 처리된다.
어쨌든, 내 예제를 통해 애플리케이션의 캐싱 요구 사항을 충족시키기 위해 애플리케이션에서해야 할 일을 파악할 수있을 것이다.
또한지도를 처리하는 데 동일한 접근 방식을 적용 할 수 있지만,이를 연습 문제로 남겨 둘 것입니다. ;-).
희망이 도움이!
건배, 남자
from https://stackoverflow.com/questions/44529029/spring-cache-with-collection-of-items-entities by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 1.4의 보안 테스트 (0) | 2018.12.27 |
---|---|
[SPRING] JavaConfig로 Spring IoC를 사용하여 AspectJ aspect를 설정하고 싶습니까? (0) | 2018.12.27 |
[SPRING] 스프링 보안 4 사용자 정의 로그인 j_spring_security_check은 http 302를 반환합니다. (0) | 2018.12.27 |
[SPRING] Spring MultipartFile 검증 및 변환 (0) | 2018.12.27 |
[SPRING] Spring Security는 런타임 중에 사용자를 로그 오프합니다. (0) | 2018.12.27 |