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!

Jagtesh Chadha
quelle

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.

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

N. Martignole
quelle
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('*')
hellvinz
quelle
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

hert
quelle
Die im Artikel verlinkte Site hat ein ungültiges Zertifikat, aber der Befehl ist genau das, wonach ich gesucht habe.
Mirzu