Angenommen, Sie möchten Felder mit under_scores benennen, und ein anderes Teammitglied verwendet camelCase. Jetzt sind Ihre Redis-Hashes ein Durcheinander, und Sie halten sich lieber an eine Konvention. Sie brauchen eine Möglichkeit, Felder über alle Hashes hinweg umzubenennen.
Redis bietet keine Möglichkeit, Felder innerhalb eines Hashes umzubenennen. Aber was noch wichtiger ist, es gibt keine Möglichkeit, dies für alle von Ihnen erstellten Hashes zu tun.
Glücklicherweise ist ein wenig Befehlszeilenmagie alles, was benötigt wird, um das Durcheinander zu beheben.
Dieser Befehl findet Schlüssel, die dem Muster "users:*" entsprechen, und benennt dann Felder um
- Erstellungsdatum bis Erstellungsdatum
- posttypeid zu postTypeId
- view_count zu viewCount
- … und so weiter
Der fehlende „hrename“-Befehl
Redis hat keinen hrename-Befehl, also schreiben wir zuerst einen im Lua-Skript. Dieser Befehl benennt Felder innerhalb eines einzelnen Hashs um.
evalsha <script-sha1-identifier> 1 <key> <old-field-1> <new-field-1>...
Sie müssen zuerst das Skript laden. Der Befehl cat hrename.lua | redis-cli -x script load
lädt das Skript und gibt eine SHA1-Kennung zurück. Sie können diesen Bezeichner verwenden, wann immer Sie das Skript aufrufen möchten.
Umbenennen von Feldern in mehreren Hashes
Jetzt, da wir einen Befehl haben, um einen einzelnen Hash zu reparieren, müssen wir ihn in einer Schleife für alle Hashes ausführen, die einem Muster entsprechen. Das Skript hash_bulk_rename_fields.sh
macht genau das.
- Zunächst verwenden wir
redis-cli --scan --pattern <pattern>
um eine Schlüsselliste zu erhalten, ein Schlüssel pro Zeile. - Als nächstes übergeben wir die Schlüssel durch
grep
. Der Scan-Befehl von Redis akzeptiert keine regulären Ausdrücke, daher führen wir eine grundlegende Filterung mit scan durch und stellen dann einen besseren regulären Ausdruck über grep bereit. - Wir führen dann ein awk-Skript für jeden Schlüssel aus. Dieses awk-Skript ist ein wenig komplex, also werden wir es aufschlüsseln
- Das awk-Skript hat eine Befehlsvorlage
evalsha <sha1> 1 __key__ <old field name> <new field name>..
. Dies ist der Befehl, der für alle Schlüssel ausgeführt wird. - Für jeden übereinstimmenden Schlüssel ersetzt der awk-Befehl
__key__
mit dem eigentlichen Schlüssel - Als nächstes konvertieren wir den String-Befehl in das Redis-Protokollformat. Dies ist das Rohformat, das redis versteht.
- Schließlich leiten wir die Rohbefehle mit dem Flag –pipe an redis-cli weiter. Dies ist der effizienteste Weg, um Massenbefehle an redis zu senden.
Anpassen dieses Skripts
- Sie können
--pattern
ändern und den Befehl grep, um die Schlüssel vom Typ Hash
auszuwählen - Sie können
cmd_template
anpassen um die Felder einzuschließen, die Sie umbenennen möchten - Wenn sich Ihr Redis-Server nicht auf localhost befindet, müssen Sie Host, Port und Passwort zweimal angeben im Befehl, im Grunde immer dann, wenn Sie redis-cli aufrufen.
Siehe auch
- Mehrere Schlüssel mit Scan umbenennen
- Schlüssel löschen, die einem Muster entsprechen
- Setzen Sie das Ablaufdatum auf mehrere Schlüssel
- RDBTools GUI for Redis ermöglicht Ihnen eine Vorschau Ihrer Massenaktionen und bietet eine leistungsstarke GUI zum Verwalten von Daten in Redis. Es ist ein kostenloser Download!