Spring Boot 통합 redis,key 사용자 정의 생 성 방식

1)사용자 정의 redis key 생 성 정책@Configuration현재 클래스 는 하나의 설정 클래스 에 속 하고 spring.cfg.xml 와 유사 하 다 는 것 을 나타 낸다.
캐 시 사용 을 지원 합 니 다.
사용자 정의 설정 원본:

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCachePrefix;
import org.springframework.data.redis.core.RedisTemplate; 
import com.alibaba.fastjson.JSON;
 
/**
 * redis     
 * @Configuration          
 * @EnableCaching      
 * @author ouyangjun
 */
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
 
    /**
     * redis key    
     * target:  
     * method:   
     * params:   
     * @return KeyGenerator
     *   :         key     ,     ,  @Cacheable     keyGenerator
     *       : @Cacheable(value = "key", keyGenerator = "cacheKeyGenerator")
     */
    @Bean
    public KeyGenerator cacheKeyGenerator() {
        return (target, method, params) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(method.getName());
            for (Object obj : params) {
                //         , hashCode     ,    key      
                sb.append(JSON.toJSONString(obj).hashCode());
            }
            return sb.toString();
        };
    }
 
    /**
     * redis      
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
        redisCacheManager.setUsePrefix(true);
        // key     , conf  
        RedisCachePrefix cachePrefix = new RedisPrefix("conf");
        redisCacheManager.setCachePrefix(cachePrefix);
        // key       , 600 
        redisCacheManager.setDefaultExpiration(600L);
        return redisCacheManager;
    }
}
2)SpringBoot 자체 캐 시 방식
설명:
4.567914.의미:이 주해 성명 을 호출 하 는 방법 은 캐 시 에서 먼저 찾 아 key 와 같은 캐 시 데이터 가 있 는 지 판단 하고 있 으 면 데 이 터 를 직접 되 돌려 줍 니 다.없 으 면 실행 방법 을 실행 한 다음 에 되 돌아 오 는 데 이 터 를 키 값 으로 캐 시 에 저장 하여 다음 에 같은 매개 변수 가 요청 할 때 캐 시 에서 데 이 터 를 되 돌려 줍 니 다.
@Cacheable 은 다음 과 같은 몇 가지 인 자 를 지원 합 니 다.
4.567914.캐 시 위치의 이름 은 비어 있 으 면 안 되 고 value 와 같은 의미 입 니 다.@EnableCaching캐 시 위치의 이름 은 비어 있 으 면 안 되 고 cacheNames 와 같은 의미 입 니 다.@Cacheable캐 시 된 key 는 기본적으로 비어 있 으 며 사용 방법 을 나타 내 는 매개 변수 유형 과 매개 변수 값 을 key 로 하고 SpEL 을 지원 합 니 다.
4.567914.키 의 생 성 정책 을 지정 합 니 다.cacheNames트리거 조건,조건 을 만족 시 키 면 캐 시 를 추가 합 니 다.기본 값 은 비어 있 습 니 다.모두 캐 시 를 추가 하고 SpEL 을 지원 합 니 다.
4.567914.의미:같은 key 의 캐 시 가 존재 할 때 캐 시 를 비 우 는 것 은 삭제 하 는 것 과 같 습 니 다.
@CacheEvict 는 다음 과 같은 몇 가지 인 자 를 지원 합 니 다.
4.567914.캐 시 위치의 이름 은 비어 있 으 면 안 되 고 value 와 같은 의미 입 니 다.value캐 시 위치의 이름 은 비어 있 으 면 안 되 고 cacheNames 와 같은 의미 입 니 다.key캐 시 된 key 는 기본적으로 비어 있 으 며 사용 방법 을 나타 내 는 매개 변수 유형 과 매개 변수 값 을 key 로 하고 SpEL 을 지원 합 니 다.keyGenerator트리거 조건,조건 을 만족 시 키 면 캐 시 를 추가 합 니 다.기본 값 은 비어 있 습 니 다.모두 캐 시 를 추가 하고 SpEL 을 지원 합 니 다.conditiontrue 는 value 의 모든 캐 시 를 지 우 는 것 을 표시 합 니 다.기본 값 은 false 입 니 다.
테스트 코드:

package hk.com.cre.process.basic.service.impl; 
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; 
public class RdisCacheTest {
 
    /**
     *     
     *       : conf:redis:       hashcode
     *   : @Cacheable        redis     string
     *              ,     key redis      ,             
	 */
    @Cacheable(cacheNames = "redis", keyGenerator = "cacheKeyGenerator")
    public String getRedisString(String param1, String param2) {
        return param1+":"+param2;
    }
	
    /**
     *     
     */
    @CacheEvict(cacheNames = "redis", allEntries = true)
    public String cleanCache() {
        return "success";
    }
}
스프링 캐 시 C KeyGenerator 사용자 정의 rediskey
1.개술
이 튜 토리 얼 에서 Spring Cache 를 사용 하여 사용자 정의 키 생 성 기 를 만 드 는 방법 을 보 여 줍 니 다.
2. KeyGenerator
이것 은 캐 시 에 있 는 모든 데이터 항목 에 키 를 만 드 는 것 을 책임 집 니 다.이 키 들 은 검색 할 때 데이터 항목 을 찾 는 데 사 용 됩 니 다.
이 곳 의 기본 구현 은 SimpleKeyGenerator C 입 니 다.제공 하 는 방법 매개 변 수 를 사용 하여 키 를 만 듭 니 다.같은 캐 시 이름과 매개 변수 형식 집합 을 사용 하 는 두 가지 방법 이 있다 면 충돌 할 수 있다 는 뜻 이다.
캐 시 데 이 터 를 다른 방법 으로 덮어 쓸 수 있다 는 뜻 이기 도 하 다.
3.사용자 정의 키 생 성기
키 생 성 기 는 하나의 방법 만 이 루어 져 야 합 니 다:

Object generate(Object object, Method method, Object... params)
올 바 르 게 구현 되 거나 사용 되 지 않 으 면 캐 시 데 이 터 를 덮어 쓸 수 있 습 니 다.
실현 을 살 펴 보 자.

public class CustomKeyGenerator implements KeyGenerator {
    public Object generate(Object target, Method method, Object... params) {
        return target.getClass().getSimpleName() + "_"
          + method.getName() + "_"
          + StringUtils.arrayToDelimitedString(params, "_");
    }
}
그 후에 우 리 는 그것 을 사용 할 수 있 는 두 가지 방법 이 있다.첫 번 째 는 응용 프로그램 Config 에서 콩 을 설명 하 는 것 입 니 다.
클래스 는 캐 시 설정 에서 지원 하거나 캐 시 설정 프로그램의 확장 을 실현 해 야 합 니 다.

@EnableCaching
@Configuration
public class ApplicationConfig extends CachingConfigurerSupport {
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        Cache booksCache = new ConcurrentMapCache("books");
        cacheManager.setCaches(Arrays.asList(booksCache));
        return cacheManager;
    }
    @Bean("customKeyGenerator")
    public KeyGenerator keyGenerator() {
        return new CustomKeyGenerator();
    }
}
두 번 째 방법 은 이 를 특정한 방법 에 사용 하 는 것 이다.

@Component
public class BookService {
    @Cacheable(value = "books", keyGenerator = "customKeyGenerator")
    public List<Book> getBooks() {
        List<Book> books = new ArrayList<>();
        books.add(new Book("The Counterfeiters", "André Gide"));
        books.add(new Book("Peer Gynt and Hedda Gabler", "Henrik Ibsen"));
        return books;
    }
}
4.결론
본 논문 에서 봄 캐 시 를 사용자 정의 하 는 키 생 성 기 를 실현 하 는 방법 을 연구 했다.
여느 때 와 마찬가지 로 예제 의 전체 소스 코드 는 4.567915 에서 찾 을 수 있다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기