MySQL-Datenübertragung Redis

       Wenn Sie kürzlich Redis zu Ihrem Abschlussprojekt hinzufügen möchten, müssen Sie die Daten in MySQL an Redis übertragen. Hier stellt sich also die Frage: Wie überträgt man Daten von einer relationalen Datenbank in eine nicht relationale Datenbank? Dann wurden die Baidu-MySQL-Daten auf Redis migriert, und wie erwartet behielt jedes Blog ein hohes Maß an Einheitlichkeit bei. Betrachtet man die wenigen Blogs, wurden fast alle nachgedruckt und es gab nur sehr wenige Originalblogs. Natürlich bin ich nur ein Neuling und habe lange getüftelt, bis es mir gelungen ist.

       Wenn die Schüler, die Baidu bestanden haben, mit der Tabelle events_all_time vertraut sind, haha. Ich möchte nicht mehr sagen, der Originaltext ist in Ordnung, nicht, dass er in Ordnung ist, aber das Denken ist in Ordnung, die Grammatik ist in Ordnung, aber nach der eigentlichen Operation wird ein Fehler gemeldet, und der Grund für diesen Fehler ist Unbekannt. Die Lösung, die ich bei Stack Overflow gesehen habe, verwendet kein Redisprotokoll. Für mich als Anfänger gibt es einige Stellen im Artikel, die nicht erklärt werden. Es scheint etwas anstrengend zu sein und ich verstehe nicht, warum es so geschrieben ist. Dann geht es in meinem Artikel darum, zuerst das Redis-Protokoll zu erklären, dann über die Methode zum Konvertieren von MySQL- in Redis-Befehlen zu sprechen und schließlich über das Format mehrerer Daten in MySQL und wie man sie in Redis speichert. (Hier ist event_all_time 2333, ich weiß nicht, wie oft es übertragen wurde)

CREATE TABLE events_all_time (
  id int(11) unsigned NOT NULL AUTO_INCREMENT,
  action varchar(255) NOT NULL,
  count int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  UNIQUE KEY uniq_action (action)
);

       Text

       Die Methode zum Migrieren von Redis von MySQL auf Baidu ist für Studenten, die es nicht verstehen, in Kombination mit der Erklärung auf der offiziellen Website https://redis.io/topics/mass-insert besser zu verstehen.

       Es ist nicht sinnvoll, den normalen Redis-Client zum Einfügen einer großen Datenmenge zu verwenden. Die offiziell empfohlene Methode besteht daher darin, eine Textdatei zu generieren, die dem Redis-Protokoll entspricht, und sie mit Redis einheitlich aufzurufen. Die Textdatei kann Redis-Befehle oder Redis-Protokolle schreiben. Das Protokollformat ist wie folgt

*<args><cr><lf>
$<len><cr><lf>
<arg0><cr><lf>
<arg1><cr><lf>
...
<argN><cr><lf>

        <cr> entspricht '\r' (ASCII-Code 13), <lf> entspricht '\n' (ASCII-Code 10). Dann haben die Symbole * und $ folgende Bedeutung: Fügen Sie nach dem *-Zeichen eine Zahl hinzu, um anzugeben, wie viele Parameter der gesamte Befehl insgesamt hat, einschließlich des Befehls selbst. Fügen Sie nach $ eine Zahl hinzu, um den entsprechenden Parameter und die Anzahl der Bytes anzugeben.

       Geben Sie einen kastanienbraunen    SET-Schlüssel1-Wert1 ein

Das in Redis konvertierte Protokoll ist *3\r\n$3\r\nSET\r\n$4\r\nkey1\r\n$6\r\nvalue1\r\n

*3-->Es gibt drei set, key1, value1

$3-->Der folgende SET hat drei Bytes

$4-->Der folgende Schlüssel1 hat 4 Bytes

$6--> Der hintere Wert1 enthält 6 Bytes

Ist das nicht ganz einfach ^_^!!!!!

Schauen Sie sich dann die Datei events_to_redis.sql an, die bereits mehrfach übertragen wurde. Nachdem Sie das Redis-Protokoll verstanden haben, schauen Sie sich diesen Code an und er wird auf einen Blick klar sein. Die Absicht des Autors besteht darin, die in der Datenbank abgefragten Werte in entsprechende Befehle zu integrieren.

SELECT CONCAT(
  "*4\r\n",
  '$', LENGTH(redis_cmd), '\r\n',
  redis_cmd, '\r\n',
  '$', LENGTH(redis_key), '\r\n',
  redis_key, '\r\n',
  '$', LENGTH(hkey), '\r\n',
  hkey, '\r\n',
  '$', LENGTH(hval), '\r\n',
  hval, '\r'
)
FROM (
  SELECT
  'HSET' as redis_cmd,
  'events_all_time' AS redis_key,
  action AS hkey,
  count AS hval
  FROM events_all_time
) AS t

endgültige Verwendung

mysql -h 'IP-Adresse' -u'Benutzername' -p'Passwort' 'Datenbank' --skip-column-names --raw < events_to_redis.sql | redis-cli --pipe

Dieser Befehl bedeutet, dass Sie nach der MySQL-Anmeldung die Datenbank „Datenbank“ verwenden, --skip-column-names (stellen Sie sicher, dass die MySQL-Ausgabe keine Spaltennamen enthält) --raw (stellen Sie sicher, dass MySQL keine Zeilenumbrüche in Feldwerte umwandelt) und dann „events_to_redis“ ausführen .sql, und verwenden Sie die Pipeline, um sie an redis-cli zu übergeben und auszuführen.

Hier liegt ein Problem vor, das heißt, die Methode *3\r\n$3\r\nSET\r\n$4\r\nkey1\r\n$6\r\nvalue1\r\n ist nicht akzeptabel. immer einen Fehler melden 

ERR-Protokollfehler: „$“ erwartet, „ „ erhalten

Ich kenne den genauen Grund nicht. Wenn jemand es löst, hoffe ich, dass Sie einen Kommentar abgeben und mich, einen Anfänger, es auch lernen lassen können.

Lösung

Meine endgültige Lösung besteht tatsächlich darin, die SQL-Anweisung auf der Grundlage des vorherigen Verständnisses zu ändern, sodass das endgültige Ausgabeformat von MySQL das normale SET-Schlüsselwertformat ist, und es dann auszuführen.

SELECT 
  CONCAT(
    redis_cmd,' ',
    redis_key,
    idval,' ',
    ACTION,' ',
    actionval,' ',
    COUNT,' ',
    countval,' '
  ) 
FROM
  (SELECT 
    'HSET' AS redis_cmd,
    'events_all_time' AS redis_key,
    id AS idval,
    'action' AS ACTION,
    ACTION AS actionval,
    'count' AS COUNT,
    COUNT AS countval
  FROM
    events_all_time) AS t

Alles in allem spielt es keine Rolle, ob Sie MySQL, Java, Python, C/C++ oder sogar Notepad verwenden. Solange das Ausgabeformat das Redis-Protokoll oder der Redis-Befehl ist, kann diese Aufgabe durch Übergabe an redis-cli abgeschlossen werden.

Mehrere MySQL-Daten werden in Redis gespeichert

Dann verwende ich für mehrere Daten in MySQL den Befehl hmset von Redis.

HMSET-Schlüsselfeldwert [Feldwert ..]

Der Schlüssel ist der Tabellenname + die ID, sodass die einer Datentabelle entsprechenden Daten durch einfache Verarbeitung beim Abfragen abgerufen werden können. hmset Tabellenname+ID Spaltenname Wert Spaltenname Wert ...

Tatsächlich ist es auch möglich, HSET zu verwenden. Der Schlüssel ist der Tabellenname + die ID, und dann können Daten in String gespeichert werden, und die Daten können auch durch einfache Verarbeitung abgerufen werden.

 

Supongo que te gusta

Origin blog.csdn.net/qq_36571422/article/details/105383186
Recomendado
Clasificación