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?

TIMEX
quelle
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).

Donald Miner
quelle
69

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

redis-cli KEYS "user*" | xargs redis-cli DEL
user1151446
quelle
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
10

Jetzt gibt es einen Befehl zum Entfernen eines Schlüssels, dh der DEL-Taste [Tasten].

DEL-Taste ...

Narendra Chamoli
quelle
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
neilkimmett
quelle
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) }'
jeetu
quelle
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

machen
quelle
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

Gabriel McAdams
quelle
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
Privat
quelle