Abrufen / Auflisten aller Schlüssel / Wert-Paare in einer Redis-Datenbank


70

Ich verwende ein ORM namens Ohm in Ruby, das auf Redis aufbaut, und bin gespannt, wie die Daten tatsächlich gespeichert werden. Ich habe mich gefragt, ob es eine Möglichkeit gibt, alle Schlüssel / Werte in einer Redis-Datenbank aufzulisten.

Jeder Hinweis wird mir sehr helfen (ich stecke im Grunde fest). Danke im Voraus!

Update:
Ein Hinweis für andere, die dies mit redis-cli ausprobieren. Verwenden Sie Folgendes:

$ redis-cli keys
* (press * followed by Ctrl-D)
... (prints a list of keys and exits)
$

Danke @antirez und @hellvinz!

Antworten:


118

Sie können das Redis-Dataset mit dem redis-cliin der Redis-Distribution enthaltenen Tool untersuchen.

Starten Sie das Tool einfach ohne Argumente und geben Sie Befehle ein, um das Dataset zu untersuchen.

Zum Beispiel KEYS werden alle Schlüssel aufgelistet, die einem Muster im Glob-Stil entsprechen, zum Beispiel mit: keys *Sie sehen alle verfügbaren Schlüssel.

Anschließend können Sie mit dem TYPEBefehl überprüfen, welcher Typ ein bestimmter Schlüssel ist. Wenn es sich um eine Liste handelt, können Sie die darin enthaltenen Elemente mit abrufen LRANGE mykey 0 -1. Wenn es sich um ein Set handelt, verwenden Sie stattdessen SMEMBERS mykeyund so weiter. In der Redis-Dokumentation finden Sie eine Liste aller verfügbaren Befehle und deren Funktionsweise.


28

Über die Befehlszeile können Sie auch den Befehl dump verwenden , der seit Redis 2.6.0 verfügbar ist

redis-cli KEYS \* | xargs -n 1 redis-cli dump

(Beachten Sie, dass dies auch mit dem Befehl get für frühere Versionen funktioniert, wenn Sie nichts dagegen haben.)


Oder verwenden Sie den Befehl GET, wenn Sie eine ältere Redis-Version haben. Und wenn Sie viele Schlüssel haben, können Sie den Befehl xargs mit -P parallelisieren. Beispiel:redis-cli KEYS * |xargs -n 1 -P8 redis-cli get
Andy Triggs

8
Ihre Antwort ist die erste, die mir mitgeteilt hat, dass ich dem * bis \ * in der Befehlszeile entkommen muss. Ich muss ungefähr 20 Minuten mit "falscher Anzahl von Argumenten" für einen Redis-Befehl verschwendet haben, der perfekt funktioniert der Kunde, bis ich das gefunden habe. Vielen Dank.
Sam Critchley

1
Dies wird funktionieren, aber wenn Sie redis-clifür jeden Schlüssel ein ausführen müssen, ist dies extrem langsam.
Tokand

21

Fügen Sie der Antirez-Antwort nur ein praktisches Rubin-Beispiel hinzu (ich werde es nicht wagen, mit ihm zu konkurrieren)

irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'redis'
=> true
irb(main):004:0> r = Redis.new
=> #<Redis:0x8605b64 @sock=#<TCPSocket:0x8605ab0>, @timeout=5, @port=6379, @db=0, @host="127.0.0.1">
irb(main):005:0> r.keys('*')

3

Ich bin hier gelandet, weil ich nach einer Möglichkeit gesucht habe, alle Schlüssel / Werte in redis zu sichern. Wenn dies auf Sie zutrifft, lesen Sie diesen Artikel .

Verwenden redis-cli bgsave


Die im Artikel verlinkte Site hat ein ungültiges Zertifikat, aber der Befehl ist genau das, wonach ich gesucht habe.
Mirzu
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.