Commande Redis pour obtenir toutes les clés disponibles?

503

Existe-t-il une commande Redis pour récupérer toutes les clés de la base de données? J'ai vu des bibliothèques python-redis les récupérer. Mais je me demandais s'il était possible de redis-client.

Lalith
la source

Réponses:

722

Essayez de regarder la KEYScommande. KEYS *répertorie toutes les clés stockées dans redis.

EDIT: veuillez noter l'avertissement en haut de la page de KEYSdocumentation:

Complexité temporelle: O (N) avec N étant le nombre de clés dans la base de données, sous l'hypothèse que les noms de clés dans la base de données et le modèle donné ont une longueur limitée.

MISE À JOUR (V2.8 ou supérieure): SCAN est une alternative supérieure à KEYS, dans le sens où elle ne bloque pas le serveur et ne consomme pas de ressources importantes. Préférez l'utiliser.

yojimbo87
la source
96
Exemple d'utilisation CLI:redis-cli keys "*"
XåpplI'-I0llwlg'I -
4
Correction: Toutes les commandes redis sont à un seul thread et bloqueront le serveur. La seule différence est qu'il KEYSa le potentiel de bloquer le serveur plus longtemps lors de l'interrogation d'un grand ensemble de données
Leo
156

Mis à jour pour Redis 2.8 et supérieur

Comme indiqué dans les commentaires des réponses précédentes à cette question, KEYSest une commande potentiellement dangereuse car votre serveur Redis ne sera pas disponible pour effectuer d'autres opérations tant qu'il le servira. Un autre risque KEYSest qu'il peut consommer (en fonction de la taille de votre espace de clés) beaucoup de RAM pour préparer le tampon de réponse, ce qui peut donc épuiser la mémoire de votre serveur.

La version 2.8 de Redis avait introduit le SCAN famille de commandes qui sont beaucoup plus polies et peuvent être utilisées dans le même but.

L'interface de ligne de commande fournit également un moyen agréable de travailler avec:

$ redis-cli --scan --pattern '*'
Itamar Haber
la source
59

Il peut arriver qu'en utilisant redis-cli, vous vous connectiez à votre serveur redis distant, puis la commande:

KEYS *

ne montre rien, ou mieux, cela montre:
(empty list or set)

Si vous êtes absolument sûr que le serveur Redis que vous utilisez est celui dont vous disposez, alors peut-être que votre redis-cli ne se connecte pas à l'instance de base de données correcte de Redis.

Comme cela est mentionné dans les documents Redis, les nouvelles connexions se connectent par défaut à la base de données 0 .

Dans mon cas, la KEYScommande ne récupérait pas les résultats car ma base de données était 1. Pour sélectionner la base de données souhaitée, utilisez SELECT .
Le db est identifié par un entier.

SELECT 1
KEYS *

Je poste cette information car aucune des réponses précédentes n'a résolu mon problème.

Evhz
la source
31

-> Obtenez toutes les clés de redis-cli

-redis 127.0.0.1:6379> keys *

-> Obtenir la liste des modèles

-redis 127.0.0.1:6379> keys d??

Cela produira des clés qui commencent par «d» avec trois caractères.

-redis 127.0.0.1:6379> keys *t*

Cela obtiendra les clés avec le caractère 't' correspondant à la clé

-> Compter les clés de la ligne de commande par

-redis-cli keys * |wc -l

-> Ou vous pouvez utiliser dbsize

-redis-cli dbsize
denny
la source
Je viens de copier les réponses et d'essayer. Il a donné une "clé de commande inconnue" ". "clé" n'est pas la commande, "clés" l'est. S'il vous plaît corriger key *t*à keys *t*.
Kunal Dethe
Merci mec pour cette information. C'était mon erreur. Actuel je suis sur mobile. Je changerai cette commande plus rapidement.
denny
Cheatsheet très utile
Hassan Baig
19

Jetez un œil à la feuille de triche Redis suivante . Pour obtenir un sous-ensemble de clés redis avec le redis-cli, j'utilise la commande

KEYS "prefix:*"
wami
la source
6

Oui, vous pouvez obtenir toutes les clés en utilisant ceci

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
Albin Mathew
la source
4
Pas exactement ce que le PO demandait (redis-cli), mais merci de l'avoir quand même signalé.
Herick
4

SCAN n'exige pas que le client charge toutes les clés en mémoire comme le fait KEYS. SCAN vous donne un itérateur que vous pouvez utiliser. J'avais un enregistrement 1B dans mon redis et je n'ai jamais pu avoir assez de mémoire pour retourner toutes les clés à la fois.

Voici un extrait de python pour obtenir toutes les clés du magasin correspondant à un modèle et les supprimer:

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

où * est le modèle pour lister toutes les clés

gobi
la source
2
Je devais citer l'étoile, comme suit:redis-cli -h <host> -p <port> keys '*'
aggregate1166877
3

Motif KEYS

Disponible depuis 1.0.0.

Complexité temporelle: O (N) avec N étant le nombre de clés dans la base de données, sous l'hypothèse que les noms de clés dans la base de données et le modèle donné ont une longueur limitée.

Renvoie toutes les clés correspondant au modèle.

Avertissement: il n'est pas recommandé d'utiliser cette commande car elle peut nuire aux performances lorsqu'elle est exécutée sur de grandes bases de données au lieu de KEYS, vous pouvez utiliser SCAN ou SETS .

Exemple de commande KEYS à utiliser:

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
la source
1

Si votre redis est un cluster, vous pouvez utiliser ce script

#!/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"
octet mamba
la source
1

Obtenez toutes les clés dans Redis

Obtenez toutes les clés à l'aide de l'option --scan:

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

Liste toutes les clés à l'aide de la commande KEYS:

$ redis-cli KEYS '*'
Netwons
la source
0

Afin d'obtenir toutes les clés disponibles sur le serveur redis, vous devez ouvrir redis-cli et taper: KEYS * Pour obtenir plus d'aide, veuillez visiter cette page: Ce lien

behzad babaei
la source
0

Si vous utilisez Laravel Framework, vous pouvez simplement utiliser ceci:

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

print_r($allKeyList);

En Core PHP:

$redis = new Redis();

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

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

print_r($allKeyList);
Vinay Singh
la source
0

Vous pouvez simplement vous connecter à votre serveur redis en utilisant redis-cli, sélectionner votre base de données et taper KEYS *, n'oubliez pas que cela vous donnera toutes les clés présentes dans la base de données redis sélectionnée.

user1157635
la source