Meine Anforderung besteht darin, Pipeline-Transaktionen zu implementieren, die Verbindung zu einem Redis-Cluster mit go.Ich verwende Go-Redisis-Paket, das Redis Cluster, Pipelines und Transaktionen unterstützt. Wie implementiere ich Pipeline-Transaktionen, ohne den WATCH-Schlüssel im go-redis-Paket zu verwenden. Ich schaute auch auf Tx.Pipeline() im Paket.Ist UHR Schlüssel notwendig während der Umsetzung TransaktionImplementieren von Pipelining und Transaktion zu einem Redis-Cluster mit Go-Redis-Paket ohne WATCH
Implementieren von Pipelining und Transaktion zu einem Redis-Cluster mit Go-Redis-Paket ohne WATCH
Antwort
Sie werden wahrscheinlich unglückliche Ergebnisse mit einer Kombination aus Pipeline, Transaktionen (MULTI/EXEC) und Cluster erleben. In Redis Cluster sprechen Sie mit mehreren Servern. Dies ist wichtig, da sowohl Pipelining als auch MULTI/EXEC Single-Node-orientierte Befehle sind.
Beim Pipelining werden im Wesentlichen eine Reihe von Befehlen in die Warteschlange gestellt und als einzelner Netzwerkaufruf an den Server gesendet. Wenn Ihre Befehle zu verschiedenen Cluster-Knoten gehen müssen, funktioniert das nicht, da Sie nicht einen einzelnen Netzwerk-Send verwenden können, um ihn an mehrere Knoten zu senden.
In ähnlicher Weise existiert MULTI nur innerhalb des Knotens, an den es gesendet wurde, nicht clusterweit. Wenn Ihre Befehle in den Multi/Exec-Zugriffsschlüsseln auf verschiedenen Knoten stehen, haben Sie daher keine zuverlässigen Transaktionen.
Wie das manifestiert, ist unbekannt, weil es von der Client-Bibliothek und von irgendwelchen Überprüfungen abhängt, die es durchführt, wie es eine Umleitung während eines Transaktionsblocks handhabt.
Wenn Sie jedoch unbedingt Pipelined Multi/Exec benötigen, müssen Sie entweder sicherstellen, dass alle Schlüssel auf einem Knoten sind, indem Sie die "hashtag" -Methode von Redis verwenden; Verwenden Sie clientseitigen Code, um zu überprüfen, wo alle Schlüssel sind, einen Fehler zu erzeugen, wenn nicht auf dem gleichen Knoten, in der Hoffnung, dass ein Schlüssel zwischen der Überprüfung und der Ausführung des Befehls nicht verschoben wurde; oder nicht Cluster verwenden. In den ersten beiden Fällen sollten Sie WATCH
verwenden, um die zu verwendenden Schlüssel anzugeben. So haben Sie die Möglichkeit, einen Steckplatzwechsel zu erkennen und Zustände unter verschiedenen Knoten zu erkennen.
- 1. Pipelining vs Transaktion in Redis
- 2. Redis Transaktion und Watch-Befehl
- 3. Beispiel für HTTP-Pipelining und kein Pipelining
- 4. Wie Socket-Verbindung in Watch OS 3.0 zu implementieren
- 5. MAPM zu implementieren, ohne
- 6. Trigger ohne Transaktion?
- 7. Wie JPA-Transaktion mit Spring Boot-Anwendung zu implementieren?
- 8. Apple Watch - Speichern von Daten zu Apple Watch separat ohne Abhängigkeit von iPhone
- 9. Redis WATCH MULTI EXEC von einem Client
- 10. Pipelining-Übung
- 11. redis sharding, pipelining und round-trips
- 12. Paralleles Pipelining
- 13. Pipelining von data.frame in R
- 14. Wie ohne Transaktion rückgängig zu machen
- 15. Pipelining in Baugruppe
- 16. Pipelining String in Powershell
- 17. Wie @TypeDef mit Hibernate-Transaktion zu verwenden, ohne Unveränderlichkeit
- 18. iOS7 und Apple Watch
- 19. R Pipelining-Funktionen
- 20. Transaktion von customFragment zu customFragment
- 21. SQL select Kunden, Artikel aus Transaktionen mit und ohne Transaktion
- 22. HTTP Pipelining Anfrage Text Beispiel
- 23. Watch Einstellungswert von Eigenschaften
- 24. Problem mit Umleitung und Pipelining in meiner einfachen UNIX-Shell
- 25. Pipelining der Befehle cat und ls
- 26. Pipelining setTimeout in node.js
- 27. Wie Faltungsverbindungen ohne gebundene Gewichte zu implementieren?
- 28. Wie ODOO ohne Quellcode zu implementieren
- 29. Archiv Watch App-Anwendung ohne iOS-Anwendung
- 30. Website-Migration von einem Server mit cPanel zu einem ohne?
Was ist falsch an der Verwendung der 'Watch' Methode? Wenn Ihnen die API nicht gefällt, ist 'redigo' ein weiteres beliebtes Paket. – JimB