복붙노트

[REDIS] 레디 스 - 어떻게 구성 사용자 정의 변환에

REDIS

레디 스 - 어떻게 구성 사용자 정의 변환에

봄 - 데이터 - 레디 스에서, 우리는 어떻게 자동 유선 / 봄 부팅 응용 프로그램 또는 구성에서 주입 할 수있는 사용자 지정 컨버터를 구성 할 필요가 없습니다.

나는 봄의 데이터 레디 스 문서에서 @ReadingConverter 및 @WritingConverter 읽어보십시오. 이 문서에서, 그들을 구성하는 방법에 대한 명확하지 않다. https://github.com/spring-projects/spring-data-redis/blob/master/src/main/asciidoc/reference/redis-repositories.adoc#redis.repositories.indexes

사람이 그것을 수행하는 방법을 알고 있나요?

해결법

  1. ==============================

    1.당신은 당신의 응용 프로그램 구성에 CustomConversions 콩 명 "redisCustomConversions"를 선언해야합니다.

    당신은 당신의 응용 프로그램 구성에 CustomConversions 콩 명 "redisCustomConversions"를 선언해야합니다.

    @Bean
    public CustomConversions redisCustomConversions(){
        return new CustomConversions(Arrays.asList(new YourWritingConverter(), new YourReadingConverter()));
    }
    
  2. ==============================

    2.스프링 부팅 스타터 - 데이터 - 레디 스 테스트 : 2.0.4.RELEASE. 나는 CrudRepository를 사용하는 경우 내 @RedisHash 기업의 내 OffsetDateTime 속성이 저장되는되지 않은 문제에 직면했다. 문제는 Jsr310Converters가 OffsetDateTime의 컨버터가없는 것이 었습니다. 이 문제를 해결하기 위해, 나는 독서 컨버터를 만들어 : @구성 요소 @ReadingConverter 공용 클래스 BytesToOffsetDateTimeConverter 구현 변환기 <바이트 [] OffsetDateTime> {     @우세하다     공개 OffsetDateTime 변환 (최종 바이트 [] 소스) {         반환 OffsetDateTime.parse (새로운 String (소스), DateTimeFormatter.ISO_OFFSET_DATE_TIME);     } } 컨버터를 작성 : @구성 요소 @WritingConverter 공용 클래스 OffsetDateTimeToBytesConverter 구현 변환기 {     @우세하다     공개 바이트 [] 변환 (최종 OffsetDateTime 소스) {         반환 source.format (DateTimeFormatter.ISO_OFFSET_DATE_TIME) .getBytes ();     } } 그리고 구성의 RedisCustomConversions 콩 등록 : 수입 org.springframework.context.annotation.Bean; 수입 org.springframework.context.annotation.Configuration; 수입 org.springframework.data.redis.core.convert.RedisCustomConversions; 수입 org.springframework.data.redis.repository.configuration.EnableRedisRepositories; 수입 java.util.Arrays; @Configuration @EnableRedisRepositories 공용 클래스 RedisConfiguration {     @콩     공공 RedisCustomConversions의 redisCustomConversions (OffsetDateTimeToBytesConverter offsetToBytes,                                                          BytesToOffsetDateTimeConverter bytesToOffset) {         새로운 RedisCustomConversions를 반환 (Arrays.asList (offsetToBytes, bytesToOffset));     } }

    스프링 부팅 스타터 - 데이터 - 레디 스 테스트 : 2.0.4.RELEASE. 나는 CrudRepository를 사용하는 경우 내 @RedisHash 기업의 내 OffsetDateTime 속성이 저장되는되지 않은 문제에 직면했다. 문제는 Jsr310Converters가 OffsetDateTime의 컨버터가없는 것이 었습니다. 이 문제를 해결하기 위해, 나는 독서 컨버터를 만들어 : @구성 요소 @ReadingConverter 공용 클래스 BytesToOffsetDateTimeConverter 구현 변환기 <바이트 [] OffsetDateTime> {     @우세하다     공개 OffsetDateTime 변환 (최종 바이트 [] 소스) {         반환 OffsetDateTime.parse (새로운 String (소스), DateTimeFormatter.ISO_OFFSET_DATE_TIME);     } } 컨버터를 작성 : @구성 요소 @WritingConverter 공용 클래스 OffsetDateTimeToBytesConverter 구현 변환기 {     @우세하다     공개 바이트 [] 변환 (최종 OffsetDateTime 소스) {         반환 source.format (DateTimeFormatter.ISO_OFFSET_DATE_TIME) .getBytes ();     } } 그리고 구성의 RedisCustomConversions 콩 등록 : 수입 org.springframework.context.annotation.Bean; 수입 org.springframework.context.annotation.Configuration; 수입 org.springframework.data.redis.core.convert.RedisCustomConversions; 수입 org.springframework.data.redis.repository.configuration.EnableRedisRepositories; 수입 java.util.Arrays; @Configuration @EnableRedisRepositories 공용 클래스 RedisConfiguration {     @콩     공공 RedisCustomConversions의 redisCustomConversions (OffsetDateTimeToBytesConverter offsetToBytes,                                                          BytesToOffsetDateTimeConverter bytesToOffset) {         새로운 RedisCustomConversions를 반환 (Arrays.asList (offsetToBytes, bytesToOffset));     } }

  3. ==============================

    3.이 코드는 사람을 도움이 될 수 있습니다. 감사합니다 @Mikhail

    이 코드는 사람을 도움이 될 수 있습니다. 감사합니다 @Mikhail

    @Component
    public class RedisObjectHelper {
    
        @Resource
        private RedisTemplate<String, ?> redisTemplate;
        private HashOperations<String, byte[], byte[]> hashOperations;
        private HashMapper<Object, byte[], byte[]> mapper;
    
        @PostConstruct
        public void init() {
            mapper = new ObjectHashMapper(new CustomConversions(Arrays.asList(new Timestamp2ByteConverter(), new Byte2TimestampConverter())));
            hashOperations = redisTemplate.opsForHash();
        }
        // and any methods
    }
    

    스프링 데이터 레디 스-1.8.4.RELEASE 테스트

  4. from https://stackoverflow.com/questions/42915576/redis-how-to-configure-custom-conversions by cc-by-sa and MIT license