112 votes

Comment obtenir toutes les clés avec leurs valeurs dans Redis

Je sais que pour obtenir la liste de toutes les clés dans Redis, je dois utiliser KEYS *, mais y a-t-il un moyen d'afficher toutes les clés ainsi que leurs valeurs ensemble?

Quelques minutes de recherche n'ont donné aucun résultat.

P.S. Merci beaucoup pour les réponses, mais je recherche une solution native. Je peux écrire une fonction qui itère à travers toute la sortie de KEYS * par moi-même.

66voto

firelynx Points 56

Il n'y a pas de moyen natif de faire cela.

La documentation des commandes Redis ne contient aucune commande native pour obtenir la clé et la valeur de plusieurs clés.

La manière la plus native de le faire serait de charger un script lua dans votre Redis en utilisant la commande SCRIPT LOAD ou la commande EVAL.

Solution Bash Haxx

Un contournement serait d'utiliser un peu de magie bash, comme ceci :

echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli 

Cela affichera les données de toutes les clés commençant par YOURKEY

Notez que la commande keys est une opération bloquante et doit être utilisée avec précaution.

51voto

Nikhil Pate Points 495

Oui, vous pouvez imprimer toutes les clés en utilisant le script bash ci-dessous,

for key in $(redis-cli -p 6379 keys \*);
  do echo "Clé : '$key'" 
     redis-cli -p 6379 GET $key;
done

où 6379 est le port sur lequel redis est en cours d'exécution.

25voto

Juuso Ohtonen Points 888

J'ai affiné un peu la solution bash, de sorte que le scan plus efficace est utilisé à la place de keys, et l'impression des valeurs du tableau et du hash est prise en charge. Ma solution imprime également le nom de la clé.

redis_print.sh:

#!/bin/bash

# Défaut au motif de clé '*', ce qui signifie toutes les clés redis dans l'espace de noms
REDIS_KEY_PATTERN="${REDIS_KEY_PATTERN:-*}"
for key in $(redis-cli --scan --pattern "$REDIS_KEY_PATTERN")
do
    type=$(redis-cli type $key)
    if [ $type = "list" ]
    then
        printf "$key => \n$(redis-cli lrange $key 0 -1 | sed 's/^/  /')\n"
    elif [ $type = "hash" ]
    then
        printf "$key => \n$(redis-cli hgetall $key | sed 's/^/  /')\n"
    else
        printf "$key => $(redis-cli get $key)\n"
    fi
done

Note : vous pouvez formuler un one-liner de ce script en supprimant la première ligne de redis_print.sh et en tapant: cat redis_print.sh | tr '\n' ';' | awk '$1=$1'

14voto

Didier Spezia Points 23333

La commande KEYS ne doit pas être utilisée sur les instances de production Redis si vous avez beaucoup de clés, car elle peut bloquer la boucle d'événements Redis pendant plusieurs secondes.

Je générerais une sauvegarde (bgsave), puis j'utiliserais le package Python suivant pour l'analyser et extraire les données :

https://github.com/sripathikrishnan/redis-rdb-tools

Vous pouvez avoir une sortie JSON, ou personnaliser votre propre sortie en Python.

6voto

Kartik Chauhan Points 308

Vous pouvez utiliser MGET pour obtenir les valeurs de plusieurs clés en une seule fois.

Exemple:

redis> SET key1 "Bonjour"
"OK"
redis> SET key2 "Monde"
"OK"
redis> MGET key1 key2 nonexisting
1) "Bonjour"
2) "Monde"
3) (nil)

Pour lister toutes les clés et valeurs, vous devrez probablement utiliser bash ou quelque chose de similaire, mais MGET peut vous aider à lister toutes les valeurs lorsque vous connaissez à l'avance les clés à rechercher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X