Gibt es eine andere Möglichkeit, Big Data von Redis nach MySQL zu übertragen?
Redis hat die Möglichkeit (mit bgsave), einen Dump der Daten auf nicht blockierende und konsistente Weise zu erzeugen.
https://github.com/sripathikrishnan/redis-rdb-tools
Sie könnten das bekannte Paket von Sripathi Krishnan verwenden, um eine Redis-Dump-Datei (RDB) in Python zu analysieren und die MySQL-Instanz offline zu füllen. Oder Sie können den Redis-Dump in das JSON-Format konvertieren und Skripte in jeder Sprache schreiben, die Sie zum Füllen von MySQL verwenden möchten.
Diese Lösung ist nur interessant, wenn Sie die kompletten Daten der Redis-Instanz in MySQL kopieren möchten.
Hat Redis ein Triggersystem, mit dem ich Crons wie das Warteschlangensystem vermeiden kann?
Redis hat kein Trigger-Konzept, aber nichts hindert Sie daran, jedes Mal, wenn etwas nach MySQL kopiert werden muss, Ereignisse in Redis-Warteschlangen zu posten. Zum Beispiel statt:
# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>
Sie könnten Folgendes ausführen:
# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC
Der MULTI/EXEC-Block macht es atomar und konsistent. Dann müssen Sie nur einen kleinen Daemon schreiben, der auf Elemente der cart_to_mysql-Warteschlange wartet (unter Verwendung von BLPOP-Befehlen). Für jedes aus der Warteschlange entfernte Element muss der Daemon die relevanten Daten von Redis abrufen und die MySQL-Instanz füllen.
Redis schlägt unsere Speicherdaten in der Datei fehl. Ist es also möglich, diese Daten direkt in der MySQL-Datenbank zu speichern?
Ich bin mir nicht sicher, ob ich die Frage hier verstehe. Aber wenn Sie die obige Lösung verwenden, wird die Latenz zwischen Redis-Updates und MySQL-Updates ziemlich begrenzt sein. Wenn also Redis fehlschlägt, verlieren Sie nur die allerletzten Operationen (im Gegensatz zu einer Lösung, die auf Cron-Jobs basiert). Eine hundertprozentige Konsistenz bei der Weitergabe von Daten ist natürlich nicht möglich.