복붙노트

[REDIS] 레디 스 - 키 해시 및 SET 및 ZSET가 저장 CrudRepository에 관련되는 방법?

REDIS

레디 스 - 키 해시 및 SET 및 ZSET가 저장 CrudRepository에 관련되는 방법?

나는 봄 부팅 + 스프링 데이터 레디 스 예제를 사용하여 레디 스 개발 코드에 새로운 오전. 내가 기록을 저장할 때, 나는 키를 생성하고 이러한 키 4에서 도착 참조 HASH, 1 ZSET이 있고 다른 모든 설정됩니다.

나는 구원을지고 각 키의 의미, 봄의 문서에 표시하지 않았다. .

127.0.0.1:6379> KEYS *
 1) "persons:c5cfd49d-6688-4b83-a9b7-be55dd1c36ad"
 2) "persons:firstname:bran"
 3) "persons:39e14dae-fa23-4935-948f-1922d668d1c2"
 4) "persons:f0b6dd26-8922-4a36-bd2a-792a17dddff7"
 5) "persons:address.city:Achalpur"
 6) "persons:e493385a-64ae-42be-8398-51757153d273:idx"
 7) "persons:053cdfea-e430-4e1c-acbd-ac40050b10cd:idx"
 8) "persons:firstname:rickon"
 9) "persons:e493385a-64ae-42be-8398-51757153d273"
10) "persons:address.country:India"
11) "persons:e7fc3ebe-9b48-48a8-a5f4-33a0e21f782f:idx"
12) "persons:firstname:sansa"
13) "persons:address:location"
14) "persons:firstname:robb"
15) "persons:firstname:jon"
16) "persons:lastname:snow"
17) "persons:e7fc3ebe-9b48-48a8-a5f4-33a0e21f782f"
18) "persons:c5cfd49d-6688-4b83-a9b7-be55dd1c36ad:idx"
19) "persons:lastname:stark"
20) "persons:f0b6dd26-8922-4a36-bd2a-792a17dddff7:idx"
21) "persons:053cdfea-e430-4e1c-acbd-ac40050b10cd"
22) "persons:39e14dae-fa23-4935-948f-1922d668d1c2:idx"
23) "persons:firstname:arya"
24) "persons:83cd4f58-c272-4d81-9023-8c66c8ac34b0:idx"
25) "persons:83cd4f58-c272-4d81-9023-8c66c8ac34b0"
26) "persons:address.city:Nagpur"
27) "persons:firstname:eddard"
28) "persons"

Person.java

@Data
@EqualsAndHashCode(exclude = { "children" })
@NoArgsConstructor
@AllArgsConstructor
@Builder
@RedisHash("persons")
public class Person {

    private @Id String id;
    private @Indexed String firstname;
    private @Indexed String lastname;

    private Gender gender;
    private Address address;

    private @Reference List<Person> children;
}

Address.java

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class Address {

    private @Indexed String city;
    private @Indexed String country;
    private @GeoIndexed Point location;
}

Gender.java

public enum Gender {
    FEMALE, MALE
}

RedisExampleBootApplication.java

@SpringBootApplication
public class RedisExampleBootApplication implements CommandLineRunner{

    @Autowired PersonRepository repository;

    public static void main(String[] args) {
        SpringApplication.run(RedisExampleBootApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {  
        Address address1 = Address.builder().city("the north").country("winterfell").location(new Point(52.9541053, -1.2401016)).build();
        Address address2 = Address.builder().city("Casterlystein").country("Westerland").location(new Point(51.5287352, -0.3817819)).build();

        Person eddard = Person.builder().firstname("eddard").lastname("stark").gender(Gender.MALE).address(address1).build();
        Person robb = Person.builder().firstname("robb").lastname("stark").gender(Gender.MALE).address(address2).build();
        Person sansa = Person.builder().firstname("sansa").lastname("stark").gender(Gender.FEMALE).address(address1).build();
        Person arya = Person.builder().firstname("arya").lastname("stark").gender(Gender.FEMALE).address(address2).build();
        Person bran = Person.builder().firstname("bran").lastname("stark").gender(Gender.MALE).address(address1).build();
        Person rickon = Person.builder().firstname("rickon").lastname("stark").gender(Gender.MALE).address(address2).build();
        Person jon = Person.builder().firstname("jon").lastname("snow").gender(Gender.MALE).address(address1).build();

        repository.save(eddard);
        repository.save(robb);
        repository.save(sansa);
        repository.save(arya);
        repository.save(bran);
        repository.save(rickon);
        repository.save(jon);

        List<Person> starks = repository.findByLastname(eddard.getLastname());
        System.out.println("Person ="+starks.size());
    }
}

해결법

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

    1.대답하기 전에, 당신이 당신의 RedisTemplate 구현 코드를 공유 될까요? (또는이 @RedisHash 주석에 의해 생성되는?) 나는 봄 - 데이터 - 레디 스 자신을 새로운 오전과 @RedisHash 주석 알고하지 않았고 그것을 확인하고자합니다.

    대답하기 전에, 당신이 당신의 RedisTemplate 구현 코드를 공유 될까요? (또는이 @RedisHash 주석에 의해 생성되는?) 나는 봄 - 데이터 - 레디 스 자신을 새로운 오전과 @RedisHash 주석 알고하지 않았고 그것을 확인하고자합니다.

    어쨌든, 기본적으로 여기에서 일어나고있는 것은 봄 - 데이터 - 레디 스 저장소는 기본적으로 서로 다른 목적을 위해 레디 스에서 지원하는 다른 데이터 구조에서 Person 객체를 삽입된다는 점이다.

    레디 스 같은 다른 데이터 구조를 지원한다 :

    봄 데이터가 자동으로 최적화 CRUD 작업에 정렬 된 세트로 위치 데이터를 삽입하는 것 같다.

    당신은 자세한 내용은 여기를 읽을 수 있습니다 :

    https://github.com/spring-projects/spring-data-examples/blob/master/redis/repositories/README.md

    https://redis.io/topics/data-types

  2. from https://stackoverflow.com/questions/53194434/redis-how-the-key-hash-and-set-and-zset-are-related-on-the-crudrepository-save by cc-by-sa and MIT license