在 SpringBoot App 中使用 redis 创建 Repository

RAS*_*RAS 1 java spring repository-pattern redis spring-boot

我有一个对象:

@Data
@AllArgsConstructor
public class ResultGeoObjectDto {
   private String addressLine;
   private String location;
   private double latitude;
   private double longitude;
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个服务,它与我的对象和Redis

@Service
public class RedisService {

private final RedisTemplate<String, List<ResultGeoObjectDto>> redisTemplate;

@Autowired
public RedisService(RedisTemplate<String, List<ResultGeoObjectDto>> redisTemplate) {
    this.redisTemplate = redisTemplate;
}

public void setValue(String key, List<ResultGeoObjectDto> value) {

    redisTemplate.opsForList().leftPush(key, value);
}

public List<ResultGeoObjectDto> getGeoObjectByKey(String key) {
    return redisTemplate.opsForList().range(key, -1, -1).get(0);
}

public boolean objectExistInRedisStore(String key) {
    return redisTemplate.hasKey(key);
}
Run Code Online (Sandbox Code Playgroud)

}

这很好用,但许多示例使用Repository模式。你能告诉我如何制作存储库吗?

例如这里使用静态键,我动态地形成了它。而且我还有一个对象列表,而不是一个。我无法理解我需要如何做正确的架构。

Mic*_*Qin 5

使用 Redis Repository 非常简单,而且比使用 RedisTemplate 持久化数据要好得多。

这是示例:

  1. 注释实体

    @RedisHash("persons")
    public class Person {
        @Id String id;
        String firstname;
        String lastname;
        Address address;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建Redis Repository接口

    public interface PersonRepository extends CrudRepository<Person, String> {}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 配置

    @Configuration
    @EnableRedisRepositories
    public class ApplicationConfig {
      @Bean
      public RedisConnectionFactory connectionFactory() {
      return new JedisConnectionFactory();
      }
      @Bean
      public RedisTemplate<?, ?> redisTemplate() {
      RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
      return template;
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 调用 CRUD 操作。

    @Autowired PersonRepository repo;
    public void basicCrudOperations() {
      Person rand = new Person("rand", "al'thor");
      rand.setAddress(new Address("emond's field", "andor"));
      repo.save(rand); ?
      repo.findOne(rand.getId()); ?
      repo.count(); ?
      repo.delete(rand); ?
    }
    
    Run Code Online (Sandbox Code Playgroud)

参考:https : //docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis.repositories