2015-09-21 2 views
1

J'utilise magasin de données REDIS et j'ai créé HMSET comme:Interrogation REDIS avec HMSET

HMSET key:1 source 5 target 2 
HMSET key:2 source 3 target 1 
HMSET key:3 source 3 target 5 
HMSET key:4 source 6 target 2 
HMSET key:5 source 2 target 3  

Maintenant, je veux interroger ces touches en fonction de la source et la liste cible fournie. Supposons, la liste de la source et la cible est [2, 3, 6]

Je veux avoir une requête comme

select from key where source in[2, 3, 6] and traget in[2, 3, 6] 

qui me donnera le résultat comme

key:4 source 6 target 2 
key:5 source 2 target 3 
+0

Votre question est très spécifique à redis. Et il n'y a pas de code de noeud dans la question. Donc, toutes les balises sauf '[redis]' ne sont pas pertinentes, veuillez les supprimer pour ne pas polluer les flux de questions des gens. –

+0

J'utilise node-redis en tant que client pour exécuter le même code. Je pense qu'il est logique d'ajouter node-redis comme balise. – Rudra

+0

Pas sûr que cela ajoute beaucoup de valeur. node-redis vous permet d'exécuter toute la gamme de commandes redis, je suppose? Si c'est le cas, il n'ajoute aucune information à la question. –

Répondre

3

Avec un ensemble de données comme celui-ci (seulement quelques ensembles), votre seule option est de les itérer (soit dans un script lua ou en récupérant dans l'application) et faire le filtrage vous-même en inspectant les hachages. Pour accélérer les choses, vous pourriez maintenir les index secondaires (encore une fois, l'effort est le vôtre). Quelque chose comme:

SADD source:3 key:2 key:3 
SADD target:2 key:1 key:4 

Ensuite, vous pouvez trouver assez rapidement toutes les clés correspondant en émettant SINTERSTORE commande

SINTERSTORE found_keys source:2 source:3 source:6 target:2 target:3 target:6 

Vous avez les clés que vous cherchez sous le nom found_keys. Bien que, si vous vous trouvez faire ce, vous devriez vous demander: pourquoi ne pas abandonner et utiliser une base de données SQL, parce que je le veux clairement.

+0

Nous migrons un module d'écriture intensive de mongodb vers redis pour le stockage temporaire des données. Il y a une requête de lecture dans mongo que je voulais convertir en redis, pour que j'obtienne le même résultat avec un minimum de changement. Quoi qu'il en soit, merci pour votre réponse. – Rudra