Wie entferne ich in redis Schlüssel?


76

Ich möchte Schlüssel entfernen, die mit "Benutzer *" übereinstimmen.

Wie mache ich das in der Redis-Kommandozeile?


1
In Redis entfernen Sie keine Schlüssel, aber die Schlüssel entfernen sich von selbst.
Max Taldykin

Antworten:


56

Dies ist derzeit keine Funktion, die auf einmal ausgeführt werden kann (siehe Kommentare in der DELDokumentation ). Leider bleibt Ihnen nur die Verwendung KEYS, das Durchlaufen der Ergebnisse und das anschließende DELEntfernen der einzelnen Ergebnisse .

Wie wäre es mit ein bisschen Bash, um zu helfen?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'`
 do echo DEL $key
done | redis-cli

Um es zu durchlaufen:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}' - Holen Sie sich alle Schlüssel und entfernen Sie den zusätzlichen Text, den Sie nicht möchten, mit awk.
  2. echo DEL $key - Erstellen Sie für jede eine Echo-Anweisung, um sie zu entfernen.
  3. | redis-cli - Nehmen Sie die DEL-Anweisungen und geben Sie sie an die CLI zurück.

Nicht vorzuschlagen, dass dies der beste Ansatz ist (Sie könnten einige Probleme haben, wenn einige Ihrer Benutzernamen Leerzeichen enthalten, aber hoffentlich verstehen Sie den Punkt).


69

Ein weiterer kompakter Einzeiler, mit dem ich mache, was Sie wollen, ist:

redis-cli KEYS "user*" | xargs redis-cli DEL

1
Das ist großartig, danke. Es ist traurig, dass Redis diese Funktionalität nicht nativ hat.
Snapfractalpop

7
Wenn Sie mehrere Datenbanken (Keyspaces) haben, ist dies der Trick: Nehmen wir an, Sie müssen Schlüssel in db3 löschen:redis-cli -n 3 KEYS "prefix:*" | xargs redis-cli -n 3 DEL
Christoffer

Gibt es einen Einzeiler, wenn Sie vor dem Ausführen des Löschbefehls AUTH (dh Login) angeben müssen?
Themse

'redis-cli help' sagt: -a <Kennwort> Kennwort, das beim Herstellen einer Verbindung zum Server verwendet werden soll. Ich hoffe es hilft.
user1151446

Ich hatte Probleme mit diesem. Wenn Sie viele Einträge löschen möchten, verwenden Sie besser die folgenden awk-basierten Einträge.
Rafael


4

Neben der Antwort von orangeoctopus benötigen Sie die echound -Pipe nicht, sondern können Befehle als Argumente übergeben redis-cli. Das heißt, Sie können tun

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
 do redis-cli "DEL" "$key"
done

2

Mit awkfinden Sie alle passenden Schlüssel von redis mit redis-cli KEYSBefehl und Pipe-to- redis-cli DELBefehl.

redis-cli KEYS "user*"  | awk '{ system("redis-cli DEL " $1) }'

1

Verwenden Sie diese Option, um Redis-Schlüssel mit Backslashes, Anführungszeichen, doppelten Anführungszeichen oder Leerzeichen zu entfernen:

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL


0

Ich weiß, dass dies alt ist, aber für diejenigen von Ihnen, die von Google hierher kommen:

Ich habe gerade ein Befehlszeilenschnittstellen-Dienstprogramm für npm und github veröffentlicht, mit dem Sie Schlüssel aus einer Redis-Datenbank löschen können, die einem bestimmten Muster entsprechen (gerade oder wie Sie den Benutzer gefragt haben ).

Das Dienstprogramm finden Sie hier:

https://www.npmjs.com/package/redis-utils-cli


0

Wenn Sie den Oneliner verwenden, können Sie das Muster bearbeiten, falls es bestimmten Zeichen entgeht. Um beispielsweise Muster wie '\ b test \ b' zu löschen, verwenden Sie:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.