【问题标题】:Redis - Why details are saving both as HASH and SET using Spring Data Redis?Redis - 为什么使用 Spring Data Redis 将详细信息同时保存为 HASH 和 SET?
【发布时间】:2019-04-09 15:28:37
【问题描述】:

我是 Redis 的新手,正在开发 Spring Boot + Spring Data Redis 示例。我正在使用CrudRepositoryExampleExampleMatchers API 从 Redis 键值存储数据库中进行搜索。

现在,当我简单地运行我的代码时,我看到人员数据也保存为 SETHASH这是正确的吗?将 Person 详细信息同时保存为 SET 和 HASH 有什么用

显示我所有的代码

public enum Gender {
    MALE, FEMALE {
        @Override
        public String toString() {
            return "Superwoman";
        }
    }
}

物种.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Species {

    @Indexed
    private String name;
}

Person.java

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("persons")
public class Person {

    @Id
    private String id;

    @Indexed
    private String firstname;
    private String lastname;
    @Indexed
    private Gender gender;

    private List<String> nicknames;
    @Indexed
    private Integer age;

    private Map<String, String> physicalAttributes;

    @Reference
    private Person relative;

    private Species species;
}

PersonRepository.java

public interface PersonRepository extends CrudRepository<Person, String>, QueryByExampleExecutor<Person> {

}

RedisExampleDemoApplication.java

@SpringBootApplication
public class RedisExampleDemoApplication implements CommandLineRunner{
    RedisMappingContext mappingContext = new RedisMappingContext();
    ExampleQueryMapper mapper = new ExampleQueryMapper(mappingContext, new PathIndexResolver(mappingContext));

    @Autowired
    private PersonRepository personRepository;

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

    @Override
    public void run(String... args) throws Exception {
        Person person = Person.builder().firstname("Walter").gender(Gender.MALE).age(50).build();
        Person person1 = Person.builder().firstname("Savani").gender(Gender.FEMALE).age(35).build();

        personRepository.save(person);
        personRepository.save(person1);

        // [firstname:Walter, gender:MALE, age:50]
        RedisOperationChain operationChain = mapper.getMappedExample(Example.of(person, ExampleMatcher.matchingAny()));
        System.out.println(operationChain.getOrSismember());


        System.out.println("----------------------------------------------");
        Person p = Person.builder().lastname("Foo").build();
        RedisOperationChain roc = mapper.getMappedExample(Example.of(p));
        System.out.println(" == "+roc.getOrSismember());
        System.out.println("-- "+roc.getSismember());
    }
}

【问题讨论】:

    标签: spring spring-boot redis jedis spring-data-redis


    【解决方案1】:

    现在回答可能已经晚了,SET可见的原因是因为二级索引。即在您的示例中,名字被注释为索引。 Redis 将此视为二级索引,默认为 SET。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 2020-10-02
      • 2018-06-01
      • 2022-08-03
      • 2019-04-22
      • 1970-01-01
      • 2017-06-12
      • 2021-09-13
      • 2019-05-02
      相关资源
      最近更新 更多