2
votes

Comment obtenez-vous une liste de flux?

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"]


0 commentaires

3 Réponses :


4
votes

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.


2 commentaires

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.



1
votes

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


4 commentaires

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.



2
votes

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

https://redis.io/commands/scan


0 commentaires