2017-12-08 1 views
0

Wenn an einem Projekt arbeiten redis (4,0) und spring-data-redis verwenden.Frühlings-data-redis: Wenn innerhalb einer Transaktion, erhalten Operationen zurückkehren würden null

Es scheint, wenn innerhalb einer Transaktion würden die get-Operationen in Java-Programm null zurück.

beispiel HashOperation ‚s get() Methode würde null zurück, wenn zwischen multi() und exec() genannt.
Aber wenn get() vor multi() gesetzt wird, kann es den Wert erhalten.

Also, warum war das?

Antwort

0

Nach der Prüfung & Denken, ich denke, das ist das vernünftige Verhalten ist, da Transaktion innerhalb redis als atomare Operation ausgeführt wird, ist es unmöglich, einen Wert in der Mitte einer Transaktion über das Netzwerk zurück an den Client zurück, so ist null vernünftig .

Alle Werte werden von den Methoden exec() als List nach Ausführung der Transaktion zurückgegeben. So

, beim Debuggen, in der Mitte der Transaktion sollte der Wert null sein, da sie noch nicht ausgeführt wird.


Vorschlag:

Wenn die Berechnung innerhalb einer Transaktion benötigen Wert von redis zu lesen, dann lesen Sie einfach diese Werte zunächst vor multi().

Dann zwischen multi() und exec() nur Update-Operationen, aber keine Leseoperationen.

0

In der Dokumentation heißt es „alle Nur-Lese-Operationen, wie zB Schlüssel werden zu einer frischen (nicht Fadenheftung) RedisConnection geleitet“. Ich denke mal, dass es den alten Wert zurückgab, während die Lesevorgänge in verschiedenen neuen Verbindungen stattfanden. Es scheint, dass das Verhalten kürzlich geändert wurde, da ich jetzt Nullwerte für alle Lesevorgänge in einer Transaktion sehe. Kann jemand vom Spring-Data-Redis-Team das erwartete Verhalten verdeutlichen?

Verwandte Themen