Redis Befehl, um alle verfügbaren Schlüssel zu erhalten?

502

Gibt es einen Redis-Befehl zum Abrufen aller Schlüssel in der Datenbank? Ich habe einige Python-Redis-Bibliotheken gesehen, die sie abgerufen haben. Aber ich habe mich gefragt, ob es von Redis-Client möglich ist.

Lalith
quelle

Antworten:

721

Versuchen Sie, den KEYSBefehl zu betrachten. KEYS *listet alle in redis gespeicherten Schlüssel auf.

BEARBEITEN: Bitte beachten Sie die Warnung oben auf der KEYSDokumentationsseite:

Zeitkomplexität: O (N), wobei N die Anzahl der Schlüssel in der Datenbank ist, unter der Annahme, dass die Schlüsselnamen in der Datenbank und das angegebene Muster eine begrenzte Länge haben.

UPDATE (V2.8 oder höher): SCAN ist eine überlegene Alternative zu KEYS, da es weder den Server blockiert noch erhebliche Ressourcen verbraucht. Verwenden Sie es lieber.

yojimbo87
quelle
96
CLI-Verwendungsbeispiel:redis-cli keys "*"
XåpplI'-I0llwlg'I -
4
Korrektur: Alle Redis-Befehle sind Single-Thread-Befehle und blockieren den Server. Der einzige Unterschied besteht darin, dass KEYSder Server möglicherweise länger blockiert wird, wenn ein großer Datensatz abgefragt wird
Leo,
155

Aktualisiert für Redis 2.8 und höher

Wie in den Kommentaren früherer Antworten auf diese Frage erwähnt, KEYShandelt es sich um einen potenziell gefährlichen Befehl, da Ihr Redis-Server nicht für andere Vorgänge verfügbar ist, während er ihn bedient. Ein weiteres Risiko KEYSbesteht darin, dass es (abhängig von der Größe Ihres Schlüsselbereichs) viel RAM verbrauchen kann, um den Antwortpuffer vorzubereiten, wodurch möglicherweise der Speicher Ihres Servers erschöpft wird.

Version 2.8 von Redis hatte den SCAN eingeführt , die viel höflicher ist und für denselben Zweck verwendet werden kann.

Die CLI bietet auch eine gute Möglichkeit, damit zu arbeiten:

$ redis-cli --scan --pattern '*'
Itamar Haber
quelle
59

Es kann vorkommen, dass Sie mit redis-cli eine Verbindung zu Ihrem Remote-Redis-Server herstellen und dann den folgenden Befehl ausführen:

KEYS *

zeigt nichts oder besser, es zeigt:
(empty list or set)

Wenn Sie absolut sicher sind, dass der von Ihnen verwendete Redis-Server derjenige ist, über den Sie die Daten verfügen, stellt Ihre redis-cli möglicherweise keine Verbindung zur richtigen Redis-Datenbankinstanz her.

Wie in den Redis-Dokumenten erwähnt, werden neue Verbindungen standardmäßig mit der Datenbank 0 verbunden .

In meinem Fall hat der KEYSBefehl keine Ergebnisse abgerufen, da meine Datenbank 1 war. Um die gewünschte Datenbank auszuwählen, verwenden Sie SELECT .
Die Datenbank wird durch eine Ganzzahl identifiziert.

SELECT 1
KEYS *

Ich poste diese Informationen, weil keine der vorherigen Antworten mein Problem gelöst hat.

Evhz
quelle
31

-> Holen Sie sich alle Schlüssel von redis-cli

-redis 127.0.0.1:6379> keys *

-> Liste der Muster abrufen

-redis 127.0.0.1:6379> keys d??

Dadurch werden Schlüssel erzeugt, die mit 'd' mit drei Zeichen beginnen.

-redis 127.0.0.1:6379> keys *t*

Dadurch werden Schlüssel mit übereinstimmenden 't'-Zeichen im Schlüssel erhalten

-> Schlüssel von der Kommandozeile bis zählen

-redis-cli keys * |wc -l

-> Oder du kannst verwenden dbsize

-redis-cli dbsize
denny
quelle
Einfach die Antworten kopiert und ausprobiert. Es gab "unbekannte Befehlstaste". "key" ist nicht der Befehl, "keys" ist. Bitte korrigieren Sie key *t*zu keys *t*.
Kunal Dethe
Danke Kumpel für diese Information. Es war mein Fehler. Derzeit bin ich auf dem Handy. Ich werde diesen Befehl schneller ändern.
Denny
Sehr nützliches Cheatsheet dieses
Hassan Baig
19

Schauen Sie sich das folgende Redis Cheat Sheet an . Um eine Teilmenge der Redis-Schlüssel mit dem Redis-Cli zu erhalten, benutze ich den Befehl

KEYS "prefix:*"
Wami
quelle
6

Ja, Sie können alle Schlüssel damit erhalten

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
Albin Mathew
quelle
4
Nicht genau das, was das OP verlangte (redis-cli), aber danke, dass Sie trotzdem darauf hingewiesen haben.
Herick
4

SCAN erfordert nicht, dass der Client alle Schlüssel wie KEYS in den Speicher lädt. SCAN bietet Ihnen einen Iterator, den Sie verwenden können. Ich hatte 1B-Datensätze in meinem Redis und konnte nie genug Speicher bekommen, um alle Schlüssel auf einmal zurückzugeben.

Hier ist ein Python-Snippet, mit dem Sie alle Schlüssel aus dem Store abrufen können, die einem Muster entsprechen, und sie löschen können:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key
Patrick Collins
quelle
3
redis-cli -h <host> -p <port> keys * 

Dabei ist * das Muster zum Auflisten aller Schlüssel

gobi
quelle
2
Ich musste den Stern wie folgt zitieren:redis-cli -h <host> -p <port> keys '*'
aggregat1166877
3

Schlüsselmuster

Verfügbar seit 1.0.0.

Zeitliche Komplexität: O (N), wobei N die Anzahl der Schlüssel in der Datenbank ist, unter der Annahme, dass die Schlüsselnamen in der Datenbank und das angegebene Muster eine begrenzte Länge haben.

Gibt alle Schlüssel zurück, die dem Muster entsprechen.

Warnung: Die Verwendung dieses Befehls wird nicht empfohlen, da er die Leistung beeinträchtigen kann, wenn er für große Datenbanken anstelle von KEYS ausgeführt wird. Sie können SCAN oder SETS verwenden .

Beispiel für den zu verwendenden Befehl KEYS:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
anandchaugule
quelle
1

Wenn Ihr Redis ein Cluster ist, können Sie dieses Skript verwenden

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"
Byte Mamba
quelle
1

Holen Sie sich alle Schlüssel in Redis

Holen Sie sich alle Schlüssel mit der Option --scan:

$ redis-cli --scan --pattern '*'

Listen Sie alle Schlüssel mit dem Befehl KEYS auf:

$ redis-cli KEYS '*'
Netwons
quelle
0

Um alle auf dem Redis-Server verfügbaren Schlüssel zu erhalten, sollten Sie redis-cli öffnen und Folgendes eingeben: KEYS * Um weitere Hilfe zu erhalten, besuchen Sie bitte diese Seite: Dieser Link

behzad babaei
quelle
0

Wenn Sie Laravel Framework verwenden, können Sie dies einfach verwenden:

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

In Core PHP:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);
Vinay Singh
quelle
0

Sie können einfach mit redis-cli eine Verbindung zu Ihrem Redis-Server herstellen, Ihre Datenbank auswählen und KEYS * eingeben. Bitte denken Sie daran, dass Sie alle in der ausgewählten Redis-Datenbank vorhandenen Schlüssel erhalten.

user1157635
quelle