2017-07-09 6 views
0

Ich habe ein Objekt:erstellen Repository mit redis in SpringBoot App

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

ich einen Dienst erstellt, die mit meinem Objekt arbeiten und 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); 
} 

}

Dies funktioniert gut , aber viele Beispiele verwenden ein Repository Muster. Kannst du mir sagen, wie man ein Repository erstellt?

Zum Beispiel here mit einem statischen Schlüssel, und ich habe es dynamisch gebildet. Und ich habe auch eine Liste von Objekten statt einer. Ich kann nicht verstehen, wie ich die richtige Architektur machen muss.

+0

Der Link, den Sie bereits alles abzudecken, teilen. Wenn Sie einen dynamischen Schlüssel benötigen, müssen Sie nur Ihre Repository-Methoden implementieren und das Schlüsselargument mit dem Objekt übernehmen. Übrigens ist der verknüpfte Tutorial-Schlüssel wie ein Tabellenname. Ihr dynamischer Schlüssel entspricht der ID des Schülers im Tutorial und ist natürlich dynamisch. Wenn Sie Ihre Objekte einzeln verwenden, ist das Speichern einer Liste eine schlechte Übung. Aber wenn Ihre Geschäftslogik so ist, ist das Speichern der Liste in Ordnung. Aber wenn ich du wäre, würde ich diese Liste von Objekten in einer höheren Klasse kapseln und die Objekte dieser Klasse speichern. – barbakini

Antwort

1

Die Verwendung von Redis Repository ist sehr einfach und viel besser als die Verwendung von RedisTemplate für persistente Daten. Hier

ist das Beispiel:

  1. Beschriften Entity

    @RedisHash("persons") 
    public class Person { 
        @Id String id; 
      String firstname; 
      String lastname; 
      Address address; 
    } 
    
  2. erstellen Redis Repository-Schnittstelle

    public interface PersonRepository extends CrudRepository<Person, String> {} 
    
  3. Konfiguration

    @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-Operationen aufrufen.

    @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); ④ 
    } 
    

Referenz: https://docs.spring.io/spring-data/data-redis/docs/current/reference/pdf/spring-data-redis-reference.pdf

Verwandte Themen