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.

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.


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 '*'

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.


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

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


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) {
})

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

3
redis-cli -h <host> -p <port> keys * 

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


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"

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"

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 '*'

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



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);

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.