SpringBoot+SpringCache 2 단계 캐 시 구현(Redis+Caffine)

1.캐 시,2 단계 캐 시
1.1 내용 설명
Spring cache:주로 spring cache 가 정의 하 는 인터페이스 방법 설명 과 주해 중의 속성 설명 을 포함 합 니 다.
springboot+spring cache:rediscache 구현 중의 결함
caffeine 안내
spring boot+spring cache 2 급 캐 시 구현
캐 시 를 사용 할 때의 흐름 도
在这里插入图片描述
1.2 Sping Cache
spring cache 는 spring-context 패키지 에서 제공 하 는 주석 기반 캐 시 구성 요소 로 표준 인 터 페 이 스 를 정의 합 니 다.이 인 터 페 이 스 를 실현 하면 방법 적 으로 주 해 를 추가 하여 캐 시 를 실현 할 수 있 습 니 다.이렇게 하면 캐 시 코드 와 업무 처리 가 결 합 된 문 제 를 피 할 수 있다.spring cache 의 실현 은 spring aop 에서 방법 절단면(MethodInterceptor)을 사용 하여 패 키 징 한 확장 입 니 다.물론 spring aop 도 Aspect 를 바탕 으로 이 루어 집 니 다.
spring cache 핵심 인 터 페 이 스 는 두 개 입 니 다.Cache 와 Cache Manager 입 니 다.
1.2.1 Cache 인터페이스
캐 시 를 제공 하 는 구체 적 인 작업,예 를 들 어 캐 시 를 넣 고 읽 고 청소 하 며 spring 프레임 워 크 에서 기본적으로 제공 하 는 것 은 다음 과 같 습 니 다.
在这里插入图片描述
1.2.2 CacheManager 인터페이스
주로 Cache 를 제공 하여 bean 의 생 성 을 실현 합 니 다.모든 응용 프로그램 에서 cacheName 을 통 해 Cache 를 격 리 할 수 있 습 니 다.모든 CaheName 은 하나의 Cache 에 대응 하여 이 루어 집 니 다.spring 프레임 워 크 에서 기본적으로 제공 하 는 실현 과 Cache 의 실현 은 모두 쌍 을 이 루어 나타 납 니 다.
1.2.3 자주 사용 하 는 주해 설명
  • @Cacheable:주로 데 이 터 를 조회 하 는 방법 에 응 용 됩 니 다
  • @CacheEvict:캐 시 를 지우 고 데 이 터 를 삭제 하 는 방법 에 주로 사 용 됩 니 다
  • @CachePut:캐 시 를 넣 고 데 이 터 를 업데이트 하 는 방법 에 주로 사 용 됩 니 다
  • @Caching:한 방법 에 여러 가지 주 해 를 설정 하 는 데 사용 합 니 다
  • @EnableCashing:spring cache 캐 시 를 사용 합 니 다.전체 스위치 로 spring boot 의 시작 클래스 나 설정 클래스 에 주석 을 추가 해 야 유효 합 니 다.
  • 2.실전 다단 계 캐 시 사용법
    
    package com.xfgg.demo.config;
    
    import lombok.AllArgsConstructor;
    import com.github.benmanes.caffeine.cache.Caffeine;
    
    import org.springframework.cache.CacheManager;
    
    import org.springframework.cache.caffeine.CaffeineCacheManager;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.concurrent.TimeUnit;
    
    @Configuration
    @AllArgsConstructor
    //         Caffeine 
    public class CacheConfig {
        @Bean
        public CacheManager cacheManager(){
            CaffeineCacheManager cacheManager = new CaffeineCacheManager();
            cacheManager.setCaffeine(Caffeine.newBuilder()
                    //  refreshAfterWrite     cacheLoader
                    // 5       /   ,    key,       loading  【  :  、  Key、         】
                    .expireAfterWrite(5, TimeUnit.MINUTES)
                    //    
                    .initialCapacity(10)
                    //    cache       
                    .maximumSize(150)
            );
            return cacheManager;
        }
    }
    
    
    
    package com.xfgg.demo.config;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.connection.RedisPassword;
    import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    //   redis  
    public class RedisConfig<GenericObjectPoolConfig> {
        @Value("${spring.redis1.host}")
        private String host;
        @Value("${spring.redis1.port}")
        private Integer port;
        @Value("${spring.redis1.password}")
        private String password;
        @Value("${spring.redis1.database}")
        private Integer database;
    
        @Value("${spring.redis1.lettuce.pool.max-active}")
        private Integer maxActive;
        @Value("${spring.redis1.lettuce.pool.max-idle}")
        private Integer maxIdle;
        @Value("${spring.redis1.lettuce.pool.max-wait}")
        private Long maxWait;
        @Value("${spring.redis1.lettuce.pool.min-idle}")
        private Integer minIdle;
    
    
        @Bean
        public RedisStandaloneConfiguration redis1RedisConfig() {
            RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
            config.setHostName(host);
            config.setPassword(RedisPassword.of(password));
            config.setPort(port);
            config.setDatabase(database);
            return config;
        }
        //      
        @Bean
        public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
            RedisTemplate<String,Object>template=new RedisTemplate<>();
            //  
            template.setConnectionFactory(factory);
            //  key     
            template.setKeySerializer(new StringRedisSerializer());
            //  value     
            template.setValueSerializer(new StringRedisSerializer());
            return template;
        }
    }
    
    
    하 나 는 cacheable 주석 을 사용 하고 하 나 는 redistemplate 를 사용 하여 캐 시 합 니 다.
    회사 프로젝트 에 사용 되 는 것 은 jedis 와 jediscluster 이기 때문에 여 기 는 단지 알 아 보 는 것 일 뿐 자세히 쓰 지 않 았 습 니 다.
    SpringBoot+SpringCache 구현 2 급 캐 시(Redis+Caffine)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot SpringCache 2 급 캐 시 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 지원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기