我有一个对象:
@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使用静态密钥,我动态地形成它。而且我还有一个对象列表,而不是一个。我无法理解我需要如何做正确的架构。
答案 0 :(得分:2)
使用Redis Repository非常简单,而且比使用RedisTemplate保存数据要好得多。
以下是示例:
注释实体
@RedisHash("persons")
public class Person {
@Id String id;
String firstname;
String lastname;
Address address;
}
创建Redis存储库界面
public interface PersonRepository extends CrudRepository<Person, String> {}
配置
@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;
}
}
调用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); ④
}