Je sais que pour obtenir la liste de toutes les clés dans Redis, je dois utiliser KEYS *
, mais existe-t-il un moyen de les afficher toutes avec leurs valeurs?
Quelques minutes de recherche n'ont donné aucun résultat.
P.S. merci beaucoup pour les réponses, mais je cherche une solution native. Je peux écrire une fonction qui parcourt toute la sortie de KEYS *
par moi-même.
La documentation de la commande Redis ne contient aucune commande native permettant d’obtenir la clé et la valeur de plusieurs clés.
Le moyen le plus naturel de procéder consiste à charger un script lua dans vos fichiers redis à l’aide de la commande SCRIPT LOAD
ou de la commande EVAL
.
Une solution de contournement} _ serait d'utiliser un peu de magie bash, comme ceci:
echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli
Cela produira 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.
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 "Key : '$key'"
redis-cli -p 6379 GET $key;
done
où 6379 est un port sur lequel redis est exécuté.
La commande KEYS ne doit pas être utilisée sur les instances de production Redis si vous avez beaucoup de clés, car elle pourrait bloquer la boucle d’événements Redis pendant plusieurs secondes.
Je générerais un dump (bgsave), puis 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.
scan 0 MATCH * COUNT 1000 // il obtient toutes les clés si return est "0" comme premier élément, alors count est inférieur à 1000 s'il en contient plus, il renvoie le pointeur en tant que premier élément et> scan pointer_val MATCH * COUNT 1000 pour obtenir le jeu de clés suivant, il continue jusqu'à ce que la première valeur soit "0".
J'ai écrit un petit code pour cette exigence particulière en utilisant hiredis. Veuillez trouver le code avec un exemple pratique sur http://rachitjain1.blogspot.in/2013/10/how-to-get-all-keyvalue-in- redis-db.html
Voici le code que j'ai écrit,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hiredis.h"
int main(void)
{
unsigned int i,j=0;char **str1;
redisContext *c; char *t;
redisReply *reply, *rep;
struct timeval timeout = { 1, 500000 }; // 1.5 seconds
c = redisConnectWithTimeout((char*)"127.0.0.2", 6903, timeout);
if (c->err) {
printf("Connection error: %s\n", c->errstr);
exit(1);
}
reply = redisCommand(c,"keys *");
printf("KEY\t\tVALUE\n");
printf("------------------------\n");
while ( reply->element[j]->str != NULL)
{
rep = redisCommand(c,"GET %s", reply->element[j]->str);
if (strstr(rep->str,"ERR Operation against a key holding"))
{
printf("%s\t\t%s\n", reply->element[j]->str,rep->str);
break;
}
printf("%s\t\t%s\n", reply->element[j]->str,rep->str);
j++;
freeReplyObject(rep);
}
}
J'ai eu le même problème, et je me suis senti sur votre post.
Je pense que le moyen le plus simple de résoudre ce problème consiste à utiliser redis Hashtable.
Il vous permet de sauvegarder un hachage, avec différents champs et valeurs associés à chaque champ.
Pour obtenir tous les champs et valeurs, client.HGETALLL
fait l'affaire. Il retourne un tableau de
tous les champs suivis de leurs valeurs.
Plus d'informations ici https://redis.io/commands/hgetall