web-dev-qa-db-fra.com

Redis commande pour obtenir toutes les clés disponibles?

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 si cela était possible avec Redis-Client.

449
Lalith

Essayez de regarder KEYS commande. KEYS * listera toutes les clés stockées dans redis.

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

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

UPDATE (V2.8 ou supérieure): SCAN est une alternative supérieure à KEYS, en ce sens qu'elle ne bloque pas le serveur ne consomme pas non plus de ressources importantes. Préfère l'utiliser.

649
yojimbo87

Mis à jour pour Redis 2.8 et supérieur

Comme indiqué dans les commentaires des réponses précédentes à cette question, KEYS est une commande potentiellement dangereuse, car votre serveur Redis ne sera pas disponible pour effectuer d'autres opérations pendant qu'il le sert. Un autre risque avec KEYS est qu’il peut consommer (en fonction de la taille de votre espace de clé) beaucoup de RAM pour préparer le tampon de réponse, et épuiser ainsi éventuellement la mémoire de votre serveur.

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

La CLI fournit également un moyen agréable de travailler avec elle:

$ redis-cli --scan --pattern '*'
141
Itamar Haber

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

KEYS *

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

Si vous êtes absolument certain que le serveur Redis que vous utilisez est celui sur lequel vous avez les données, il est possible que votre redis-cli ne se connecte pas à l'instance de base de données correcte Redis.

Comme il est mentionné dans la documentation Redis, les nouvelles connexions se connectent par défaut à la db 0 .

Dans mon cas, la commande KEYS 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 .
La base de données est identifiée par un entier.

SELECT 1
KEYS *

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

44
Evhz

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

-redis 127.0.0.1:6379> keys *

-> Obtenir la liste des motifs

-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 va obtenir des clés avec des caractères correspondants 't' dans 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
23
denny

Jetez un oeil à la suite Redis Cheat Sheet . Pour obtenir un sous-ensemble de clés redis avec le redis-cli, utilisez la commande

KEYS "prefix:*"
17
wami

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

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.Host);    
  redisClient.keys('*example*', function (err, keys) {
})
6
Albin Mathew
redis-cli -h <Host> -p <port> keys * 

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

3
gobi

SCAN ne nécessite 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 disque 1B dans mes disques durs et je ne pouvais jamais avoir assez de mémoire pour rendre toutes les clés à la fois.

Voici un extrait de code python permettant d'extraire toutes les clés du magasin correspondant à un modèle et de les supprimer:

import redis
r = redis.StrictRedis(Host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key
3
Patrick Collins

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
forever LA

KEYS pattern

Disponible depuis 1.0.0.

Complexité temporelle: O(N), N étant le nombre de clés de la base de données, en supposant que les noms de clé de la base de données et le modèle donné ont une longueur limitée.

Renvoie toutes les clés correspondant au motif.

Avertissement: Il est déconseillé d'utiliser cette commande, car elle risquerait de nuire aux performances lorsqu'elle est exécutée sur des bases de données volumineuses au lieu de KEYS, vous pouvez utiliser SCAN ou DÉFINIT .

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"
0
anandchaugule

Afin d’obtenir toutes les clés disponibles sur le serveur Redis, vous devez ouvrir redis-cli et taper: KEYS * Pour obtenir de l’aide, visitez cette page: Ce lien

0
behzad babaei