2016-06-20 10 views
0

Ich verwende ein Spring-Repository für mein Projekt, um ein POJO in redis zu erhalten. Folgendes Beispiel zeigt, was ich erreichen möchte.Abrufen von TTL von POJO gespeichert mit Feder-Repository-Repository

@Data 
@RedisHash("Example") 
public class Example { 
    @Id 
    private String id; 
    private String attributeA; 
    private String attirbuteB; 

    @TimeToLive(unit = TimeUnit.SECONDS) 
    private Long timeToLive; 
} 

Das Repository für obige POJO sieht wie folgt aus.

public interface ExampleRepository extends CrudRepository<Example, String> { 

} 

@TimeToLive funktioniert gut, wenn der Ablauf in redis gesetzt wird. In meinem Code habe ich versucht, den Wert von timeToLive Einstellung = 1200. Der Code wie unten ...

Example example = new Example(); 
example.setId("abc"); 
example.setTimeToLive(1200L); 
exampleRepository.save(example); 

Mein Problem beginnt, wenn ich die POJO von redis abzurufen versuchen geht.

Example example = exampleRepository.findOne(id); 
System.out.println(example.getTimeToLive()); 

Der obige Code gibt immer 1200 als Ausgabe aus. Von der CLI kann ich bestätigen, dass die TTL für ein Objekt, das in redis existiert, mit der Zeit abnimmt. Es ist jedoch nicht auf das POJO eingestellt, das ich abrufen möchte.

Warum kann ich den aktuellen Wert von ttl, der in redis für diese POJO-Instanz festgelegt wurde, nicht abrufen?

Gibt es einen alternativen Weg, um dies zu erreichen, indem ein Feder-Redis-Repository verwendet wird?

Vielen Dank im Voraus!

Antwort

0

Das Zurücklesen des Time-to-Live-Werts in das Domänenobjekt wird derzeit nicht direkt unterstützt. Es gibt DATAREDIS-523, die dieses Problem anvisiert.

Inzwischen können Sie den Wert über RedisTemplate.getExpire(key, timeUnit) z. B. abrufen. template.getExpire("Example:abc".getBytes(), TimeUnit.SECONDS).

+0

Danke für Ihre schnelle Antwort! Schön, ein Problem dahinter zu sehen! Ich hoffe, dass diese Funktion bald hinzugefügt wird! –