J'ai besoin d'obtenir une liste de tous les flux (clés) dans une base de données mais je ne trouve pas de commande pour cela.
J'ai déjà essayé de passer en revue toutes les clés et de vérifier leur type, mais c'est trop lent / cher.
Je voudrais faire quelque chose comme XSCAN
et obtenir une liste de clés comme: ["stream1", "stream2"]
3 Réponses :
Une telle commande n'existe pas. Idem qu'il n'y a aucun moyen d'obtenir une liste d'autres structures de données, par exemple LIST, SET.
À la place, vous pouvez créer un SET supplémentaire pour enregistrer les clés des flux que vous avez créés. Pour que vous puissiez scanner le SET pour obtenir la liste des flux.
Je sais qu'il n'y a pas de XSCAN
mais il existe des méthodes "obtenir une liste des autres structures de données" SortedSet Définir Hash . Je préfère avoir un XSCAN pour ne pas avoir à tenir une liste moi-même.
@aemadrid ZSCAN
, SSCAN
et HSCAN
sont des commandes permettant de scanner les éléments dans un seul ensemble trié, défini et haché. Ce ne sont PAS des commandes pour obtenir une liste de ces structures de données. Si vous ne souhaitez analyser les éléments que dans un seul flux, vous pouvez utiliser le XREAD
. Si vous avez besoin d'obtenir une liste d'ensembles, d'ensembles, de hachages ou de flux triés, vous devez tout de même conserver une liste vous-même.
Si vous pouvez avoir un préfixe dans les noms de flux, ex: 'MyStream: 1', 'MyStream: 2' Ensuite, vous pouvez utiliser la commande scan standard avec des modèles correspondant à MyStream: *
MODIFIER: Pour répondre au souci des OP de ne pas avoir à utiliser de préfixe et d'utiliser la commande SCAN telle quelle, en ajoutant à partir des commentaires:
Vous pouvez éviter d'utiliser un préfixe en utilisant la fonction d'espacement des noms fournie par redis. Vous pouvez attribuer une «base de données» (0-15 par défaut) pour les noms de flux. Supposons que vous utilisiez la base de données 5 pour les flux, la commande scan dans la base de données 5 ne devrait renvoyer que les clés. redis.io/commands/select
Je suis d'accord avec cela pour l'instant même si j'espérais avoir un moyen d'obtenir la liste sans préfixe.
@aemadrid: vous pouvez éviter d'utiliser un préfixe en utilisant la fonction d'espacement des noms fournie par redis. Vous pouvez attribuer une 'base de données' (0-15 par défaut) pour les noms de flux. Supposons que vous utilisiez la base de données 5 pour les flux, la commande scan dans la base de données 5 devrait renvoyer uniquement les clés. redis.io/commands/select
Merci pour la suggestion. je n'avais pas pensé à utiliser les bases de données.
@aemadrid: Heureux d'être utile. Si vous pensez que cela répond le mieux à votre question, veuillez l'accepter pour fermer la question. J'ai mis à jour la suggestion de base de données dans la réponse originale.
Depuis la version 6.0, vous pouvez utiliser l'option TYPE pour demander à SCAN de ne renvoyer que les objets correspondant à un type donné.
SCAN 0 TYPE stream