2017-05-08 6 views
1

Je veux stocker les détails de structure ci-dessous dans redis. J'ai pensé à utiliser Redis HASH.Comment utiliser la comparaison entre les valeurs dans Redis et Result one details?

Structure:

Id HighRange LowRange Data1 Data2 
1 11222000 11222999 some text 
2 22333000 22333999 some text 

Je veux vérifier la valeur de plage particulière est présente ou non. S'il est présent, je dois obtenir tous les détails correspondants de la structure.

S'il s'agit d'une table de base de données, j'utiliserais '11222456' >= HighRange and '11222456' <= LowRange. Mais, je ne sais pas comment stocker ces structures dans Redis. Alors que je peux chercher dans les Redis en utilisant entre valeur de gamme.

J'ai fait un googling, j'ai trouvé ZRANGE, ZRANGEBYSCORE. Mais, ils ne correspondent pas à mes besoins.

Veuillez me guider, Comment gérer ce modèle dans Redis.

+0

Chaque 'row' contient à la fois des scores High et Low? – h0x91B

+0

Oui..Les valeurs de plage haute et basse sont dans la même rangée. – sivasathish

Répondre

0

Ok, vous avez besoin d'un https://redis.io/topics/indexes#multi-dimensional-indexes

Cette technique vous permet de réaliser des index pour deux ou plusieurs dimensions, comme XYZ. Un peu compliqué à comprendre, mais essayons.

Disons que votre Lowrange est X et Highrange est Y Et nos données ressemble à ceci:

ID X Y 
1 0100 0200 
2 0150 0250 
3 0200 0270 
4 0180 0250 

Nous faisons Zset et utilisons mêmeSCORE pour chaque ligne, mais notre valeur est la valeur entrelacée :

ZADD ZSET:1 0 00120000:1 
ZADD ZSET:1 0 00125500:2 
ZADD ZSET:1 0 00220700:3 
ZADD ZSET:1 0 00128500:4 

Lorsque nous donnons même SCORE Redis faire le tri lexical basé sur la valeur.

valeur entrelacée ... Par exemple, nous avons abc et xyz en tant que valeurs et nous voulons les entrelacer, d'abord tout ce que nous doit faire un rembourrage, notre abc va maintenant 0abc et xyz est maintenant 0xyz si nous avons padding pour 4 caractères bien sûr.

Ensuite, nous prenons le premier caractère du côté gauche de la valeur 1 et ajoutons le premier caractère de la valeur 2, puis le second caractère, le troisième, etc. Le résultat est 00axbycz.

Ainsi, la valeur entrelacée de X 0100 Y 0200 est 00120000, notre valeur Zset est <interleavedXY>:<ID>

Maintenant, nous pouvons faire des recherches comme x >= 120 && x < 200 && y >= 220 && y < 270 en utilisant la commande ZRANGEBYLEX (https://redis.io/commands/zrangebylex)

ZRANGEBYLEX ZSET:1 [00122200 [00220700 

Le résultat sera :

1) "00125500:2" 
2) "00128500:4" 

Nous avons trouvé ry 2 and 4.

Nous aurons toujours besoin de vérifier le code sortant de notre recherche, mais cela donne de très bons résultats.