Rufen Sie die Redis-Schlüssel und -Werte an der Eingabeaufforderung ab

73

Ich habe sehr kleine Daten in Redis gespeichert und das Folgende funktioniert wie erwartet, sodass ich alle Schlüssel herunterladen kann.

redis-cli keys * 

Gibt es eine Möglichkeit, das zu bekommen keys+values *?

Shantanuo
quelle

Antworten:

160

Dafür gibt es keinen Befehl, aber Sie können dazu ein Skript schreiben.

Sie müssen für jede Taste einen "Typ" -Befehl ausführen:

> type <key>

und je nach Antwort durchführen:

  • für "string": get <key>
  • für "Hash": hgetall <key>
  • für "Liste": lrange <key> 0 -1
  • für "set": smembers <key>
  • für "zset": zrange <key> 0 -1 withscores

Denken Sie daran, dass Sie für Hashes und sortierte Sets die Schlüssel / Scores und Werte erhalten.

Eine mögliche shImplementierung:

#!/bin/sh -eu
keys=`redis-cli keys '*'`
if [ "$keys" ]; then
    echo "$keys" | while IFS= read -r key; do
        type=`echo | redis-cli type "$key"`
        case "$type" in
            string) value=`echo | redis-cli get "$key"`;;
            hash) value=`echo | redis-cli hgetall "$key"`;;
            set) value=`echo | redis-cli smembers "$key"`;;
            list) value=`echo | redis-cli lrange "$key" 0 -1`;;
            zset) value=`echo | redis-cli zrange "$key" 0 -1 withscores`;;
        esac
        echo "> $key ($type):"
        echo "$value" | sed -E 's/^/    /'
    done
fi

Aber beachten Sie:

Warnung: KEYSAls Befehl betrachten, der nur in Produktionsumgebungen mit äußerster Sorgfalt verwendet werden sollte. Dies kann die Leistung beeinträchtigen, wenn es für große Datenbanken ausgeführt wird. Dieser Befehl dient zum Debuggen und für spezielle Vorgänge, z. B. zum Ändern des Keyspace-Layouts.

https://redis.io/commands/keys

seppo0010
quelle
Um es hinzuzufügen, bedeuten und holen die Werte verschiedene Dinge für verschiedene "Typen"
coolest_head
1
Können Sie anleiten, wie es geschrieben werden kann? Wenn ich die Daten aus Redis bekomme, kann ich Befehle wie grep und sed verwenden. Ab sofort kann ich nur Schlüssel und keine Werte wie oben erwähnt exportieren.
Shantanuo
Kommt darauf an, was du damit machen willst. Möchten Sie eine Reihe von Befehlen erstellen, um Ihre Daten zu reproduzieren? oder was willst du machen Diese Befehle geben Ihnen die Daten, Sie müssen nur die gewünschte Ausgabe schreiben.
seppo0010
Gibt es eine Möglichkeit, Ihr Skript mit dem Befehl AUTH anzupassen, um die Kennwortauthentifizierung zu unterstützen? Ich habe versucht, "AUTH my_password" zu Ihren redis-cli-Befehlen hinzuzufügen, und es funktioniert nicht.
ajfbiw.s
2

Mit redis >= 5.xwurde ein neuer Datentyp streameingeführt. Also, die

> type <key>

sollte dir geben stream. Um seine Werte zu erhalten:

> XRANGE <key> - +
Pe Dro
quelle
2

Kurze Antwort :

for i in $(redis-cli KEYS '*'); do echo $i; redis-cli GET $i; done

Lange Antwort :

So erhalten Sie alle Schlüssel:

redis-cli KEYS '*' 

um den Wert für einen Schlüssel zu erhalten:

redis-cli GET <your-key>

und wenn Sie alle Werte wollen:

for i in $(redis-cli KEYS '*'); do redis-cli GET $i; done

und schließlich alle Schlüssel und Werte:

for i in $(redis-cli KEYS '*'); do echo $i; redis-cli GET $i; done
Clemens
quelle