Question

Récemment, je suis d'apprentissage et Redis honnêtement très impressionné et mourir à l'utiliser. L'une des choses qui continuent à me prendre la peine est « comment faire une requête Redis ». Pour être précis, je suis en train de résoudre suivant

Dire que j'ai des millions de hash stockés comme ci-dessous

usage:1 = {created: 20100521, quantity:9, resource:1033, user:1842, ...}
usage:2 = {created: 20100812, quantity:3, resource:7233, user:1842, ...}
usage:3 = {created: 20100927, quantity:4, resource:1031, user:76, ...}

S'il vous plaît noter qu'il ya beaucoup de clés dans hash j'ai montré que 4. Maintenant que je veux trouver des documents dans la fourchette de date précise, par l'utilisateur, par ressource ou pour un utilisateur en période donnée.

Je soupçonne qu'il existe des modèles spécifiques pour récupérer ces redis données. Je suis un programmeur python. J'ai regardé (port ohms) Redisco qui prend en charge certains Quering mais je ne suis pas sûr si elle ne reçoit toutes les données et les filtres puis en python.

Était-ce utile?

La solution

Pour Redis, il est préférable de comprendre ce genre de modèles de requête que vous voulez sur vos données avant de vous décider comment vous allez stocker.

Par exemple, si vous voulez faire une requête de plage de dates sur un ensemble de données, vous pouvez stocker ces données comme un ensemble Sorted où les clés sont les éléments de données que vous souhaitez interroger sur, et le score est un horodatage unix .

Dans votre exemple ci-dessus, je pourrais stocker votre hachage par exemple que:

 user_to_resource:i = user:j                   # key -> value forward map
 resources => (resource:i, created_timestamp)  # sorted set
 count_resource:i = quantity                   # key -> value quantity map

C'est, j'ai beaucoup avant et arrière pour les cartes en fonction des motifs de la requête que je voudrais soutenir.

Autres conseils

les requêtes que vous mentionnez sont très dépendants du temps. Dans ce cas, il serait sage d'utiliser un ensemble trié. Vous pouvez utiliser le timbre datetime comme le score pour chaque entrée.

Par exemple, vous pouvez faire ce qui suit:

hmset usage:1 created 20100521 quantity 9 resource 1033 user 1842
hmset usage:2 created 20100812 quantity 3 resource 7233 user 1842
hmset usage:3 created 20100927 quantity 4 resource 1031 user 76

zadd usage 20200521 1
zadd usage 20100812 2
zadd usage 20100927 3

Pour tout récupérer:

sort usage get 
# get usage:*->created get usage:*->quantity get usage:*->resource get usage:*->user

ou

lrange usage 0 -1

Pour obtenir les indices d'une gamme:

zrangebyscore usage 20100800 20100900

Pour des requêtes basées sur une valeur de clé de hachage, il est un complément utile à Redis qui permet d'utiliser des scripts écrits en Lua. Vous pouvez facilement écrire un simple script lua dans un heredoc python et utiliser la méthode redis.eval pour passer le script à Redis. Le script pourrait être une boucle qui filtre basé sur la valeur que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top