Spring 학습 노트 의 캐 시 데이터

8825 단어 봄 학습 노트
캐 시 (Caching) 는 자주 사용 하 는 정 보 를 저장 할 수 있 습 니 다. 필요 할 때마다 이 정 보 는 즉시 사용 할 수 있 습 니 다.이 장 에서 우 리 는 Spring 의 캐 시 추상 을 알 게 될 것 이다.비록 Spring 자체 가 캐 시 솔 루 션 을 실현 하지 못 했 지만 캐 시 기능 에 대해 성명 식 지원 을 제공 하여 다양한 유행 하 는 캐 시 와 통합 할 수 있 습 니 다.
1. 캐 시 지원 사용 하기
Spring 의 캐 시 지원 은 두 가지 방법 이 있 습 니 다.
  • 드라이버 캐 시 주석
  • XML 성명 의 캐 시
  • 주해 구동 캐 시 사용 하기: 자바 설정:
    @Configuration
    @EnableCaching //    
    public class CachingConfig {
    
        //       
        @Bean
        public CacheManager cacheManager(){
            return new ConcurrentMapCacheManager();
        }
    }

    XML 설정:
    
    id="cacheManager" class=
    "org.springframework.cache.concurrent.ConcurrentMapCacheManager" />

    본질 적 으로 @ EnableCashing 과 의 작업 방식 은 같다.그들 은 모두 절단면 을 만 들 고 Spring 캐 시 주 해 를 촉발 하 는 절 점 을 만 들 것 이다.사용 한 주석 과 캐 시 상태 에 따라 이 절단면 은 캐 시 에서 데 이 터 를 가 져 와 캐 시 에 추가 하거나 캐 시 에서 값 을 제거 합 니 다.
    위의 코드 에서 우 리 는 캐 시 뿐만 아니 라 캐 시 관리자 도 설정 했다.캐 시 관리 자 는 Spring 캐 시 추상 의 핵심 으로 여러 유행 하 는 캐 시 와 통합 할 수 있 습 니 다.위 에서 설명 한 Concurrent MapCacheManager 는 자바 util. concurrent. Concurrent HashMap 을 캐 시 로 저장 합 니 다.잘 맞 혔 습 니 다. 메모리 기반 이기 때문에 성명 주 기 는 응용 과 관련 이 있 습 니 다.생산 등급 의 대형 기업 급 응용 프로그램 에 대해 서 는 이상 적 인 선택 이 아 닐 수도 있다.다음은 가장 많이 사용 되 는 캐 시 관리자 몇 개 를 살 펴 보 겠 습 니 다.
    1.1 캐 시 관리자 설정
    Spring 3.1 에 다섯 개의 캐 시 관리자 가 내장 되 어 있 습 니 다. 다음 과 같 습 니 다.
  • SimpleCacheManager
  • NoOpCacheManager
  • ConcurrentMapManager
  • CompositeCacheManager
  • EhCahceCacheManager

  • 핵심 적 인 Spring 프레임 워 크 를 제외 하고 Spring Data 는 두 개의 캐 시 관리 자 를 제공 합 니 다.
  • RedisCacheManager (Spring Data Redis 프로젝트)
  • GemfireCacheManager (Spring Data GenFire 프로젝트 에서 왔 습 니 다)
  • EHcache 캐 시 사용 하기: Java 설정:
    @Configuration
    @EnableCaching //    
    public class CachingConfig {
    
        //       
        @Bean
        public EhCacheCacheManager cacheManager(CacheManager cm){
            return new EhCacheCacheManager(cm);
        }
    
        @Bean
        public EhCacheManagerFactoryBean ehcache(){
            EhCacheManagerFactoryBean ehCacheFactoryBean = new EhCacheManagerFactoryBean();
            ehCacheFactoryBean.setConfigLocation(
                    new ClassPathResource("cache/ehcache.xml"));
            ehCacheFactoryBean.setShared(true);
            return ehCacheFactoryBean;
        }
    }

    ehcache.xml:
    
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
           xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">  
    
    <cache name="testCache"
            maxBytesLocalHeap="50m"
            timeToLiveSeconds="100">
    cache>
    
    ehcache>  

    Spring 과 Ehcache 는 모두 CacheManager 형식 을 정의 합 니 다.명확 한 것 은 EhCache 의 Cache Manager 가 Spring 의 EhCache Cache Manager (Spring Cache Manager 의 실현) 에 주입 되 어야 한 다 는 것 이다.그 밖 에 EhCache 는 XML 에 자신의 설정 모드 를 정 의 했 습 니 다. 우 리 는 XML 파일 에 캐 시 를 설정 해 야 합 니 다. 위의 ehcache. xml 은 간단 한 설정 입 니 다. testcache 라 는 캐 시 를 설명 합 니 다. 가장 큰 더 미 는 50MB 이 고 생존 시간 은 100 초 입 니 다.
    Redis 캐 시 를 사용 하여 추가
    2. 캐 시 를 지원 하기 위해 주 해 를 추가 합 니 다.
    표 의 모든 주 해 는 방법 이나 유형 에 활용 할 수 있다.하나의 방법 에 두 었 을 때 설명 한 캐 시 행 위 는 이 방법 에 만 사 용 됩 니 다.주 해 를 클래스 단계 에 두 면 캐 시 행 위 는 이러한 모든 방법 에 적 용 됩 니 다.
    주해
    묘사 하 다.
    @Cacheable
    Spring 이 호출 방법 을 표시 하기 전에 캐 시 에서 방법의 반환 값 을 찾 아야 합 니 다.이 값 을 찾 을 수 있다 면 캐 시 값 을 되 돌려 줍 니 다.그렇지 않 으 면 이 방법 이 호출 되 고 반환 값 은 캐 시 에 넣 습 니 다.
    @CachePut
    Spring 에서 말 해 야 할 방법의 반환 값 을 캐 시 에 표시 합 니 다.방법 이 호출 되 기 전에 캐 시 를 검사 하지 않 고 방법 은 항상 호출 됩 니 다.
    @CacheEvict
    Spring 이 캐 시 에 하나 이상 의 항목 을 알 아야 함 을 표시 합 니 다.
    @Caching
    이것 은 그룹 별 주석 으로 여러 개의 다른 캐 시 주석 을 동시에 사용 할 수 있 습 니 다.
    2.1 캐 시 채 우기
    @ Cacheable 과 @ CachePut 는 공 통 된 속성 이 있 습 니 다.
    속성
    유형
    묘사 하 다.
    value
    String[]
    사용 할 캐 시 이름
    condition
    String
    SpEL 표현 식, false 값 을 얻 으 면 캐 시 를 호출 방법 에 적용 하지 않 습 니 다.
    key
    String
    사용자 정의 캐 시 키 를 계산 하 는 SpEL 표현 식
    unless
    String
    SpEL 표현 식, 값 이 true 이면 되 돌아 오 는 값 은 캐 시 에 넣 지 않 습 니 다.
    예시:
    @Cacheable("testCache")
        public User findOne(int id){
            System.out.println("findOne      ");
            return this.sdjr.findOne(id);
        }
    
        @CachePut(value="testCache",key="#result.id")
        public User save(User user){
            System.out.println("save      ");
            return this.sdjr.saveAndFlush(user);
        }

    key = "result. id" 는 사용자 정의 캐 시 key 로 SpEL 표현 식 을 사용 합 니 다.Spring 은 캐 시 규칙 을 정의 하 는 여러 개의 SpEL 확장 을 제공 합 니 다.
    표현 식
    묘사 하 다.#root.args
    캐 시 방법 에 전달 되 는 매개 변 수 는 배열 입 니 다.#root.caches
    이 방법 이 실 행 될 때 대응 하 는 캐 시 는 배열 형식 입 니 다.#root.target
    목표 대상#root.targetClass
    목표 대상 의 유형 은 #root.target.class 의 약자 형식 이다.#root.method
    캐 시 방법#root.methodName
    캐 시 방법의 이름 은 #root.method.name 의 약자 형식 입 니 다.#result
    방법 이 호출 한 반환 값 (@ Cacheable 주석 에 사용 할 수 없습니다)#Argument
    임의의 방법 매개 변수 이름 (예 를 들 어 #argName 또는 매개 변수 색인 (예 를 들 어 #a0 또는 #p0)
    @ Cacheable 과 @ CachePut 는 조건 화 캐 시 를 실현 하기 위해 두 개의 속성 을 제공 합 니 다. unless 와 condition, 이 두 속성 은 모두 하나의 SpEL 표현 식 을 받 아들 입 니 다.그것들 사이 에는 약간의 차이 가 있다.unless 속성 은 대상 을 캐 시 에 넣 는 것 을 막 을 수 있 습 니 다. true 일 때 캐 시 방법 으로 되 돌아 오 는 데 이 터 는 캐 시 에 넣 지 않 습 니 다.그러나 이 방법 이 호출 될 때 도 캐 시 에서 찾 습 니 다. 일치 하 는 값 을 찾 으 면 일치 하 는 값 을 되 돌려 줍 니 다.이와 달리 condition 의 표현 식 계산 결과 가 false 라면 이 방법 을 호출 하 는 과정 에서 캐 시 는 사용 되 지 않 습 니 다.캐 시 에 가서 찾 지 않 고 되 돌아 오 는 값 도 캐 시 에 넣 지 않 는 다 는 것 이다.
    2.2 캐 시 항목 삭제
    @ CacheEvict 는 캐 시 에 다른 것 을 추가 하지 않 습 니 다.반대로 @ CacheEvict 주석 이 있 는 방법 이 호출 되면 하나 이상 의 항목 이 캐 시 에서 삭 제 됩 니 다. @CacheEvict 주해 의 속성, 어떤 캐 시 항목 이 삭제 되 어야 하 는 지 지정 합 니 다.
    속성
    유형
    묘사 하 다.
    value
    String[]
    사용 할 캐 시 이름
    key
    String[]
    사용자 정의 캐 시 키 를 계산 하 는 SpEL 표현 식
    condition
    String
    SpEL 표현 식, false 값 을 얻 으 면 캐 시 는 호출 방법 에 적용 되 지 않 습 니 다.
    allEntries
    boolean
    트 루 라면 특정 캐 시 에 있 는 모든 항목 이 삭 제 됩 니 다.
    beforeInvocation
    boolean
    트 루 라면 방법 이 호출 되 기 전에 항목 을 삭제 합 니 다.false (기본 값) 라면 방법 이 성공 적 으로 호출 된 후에 항목 을 삭제 합 니 다.

    좋은 웹페이지 즐겨찾기