在SpringBoot App中使用redis创建存储库

时间:2017-07-09 14:49:33

标签: java spring spring-boot redis repository-pattern

我有一个对象:

@Data
@AllArgsConstructor
public class ResultGeoObjectDto {
   private String addressLine;
   private String location;
   private double latitude;
   private double longitude;
}

我创建了一个服务,它与我的对象和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);
}

}

这很好用,但很多例子使用Repository模式。你能告诉我如何建立一个存储库吗?

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

1 个答案:

答案 0 :(得分:2)

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

以下是示例:

  1. 注释实体

    @RedisHash("persons")
    public class Person {
        @Id String id;
        String firstname;
        String lastname;
        Address address;
    }
    
  2. 创建Redis存储库界面

    public interface PersonRepository extends CrudRepository<Person, String> {}
    
  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;
      }
    }
    
  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); ④
    }
    
  5. 参考: https://docs.spring.io/spring-data/data-redis/docs/current/reference/pdf/spring-data-redis-reference.pdf