2017-05-08 1 views
1

Ich möchte die folgenden Strukturdetails in redis speichern. Ich dachte an redis HASH.Wie verwendet man einen Vergleich zwischen den Werten in Redis und Ergebnis eine Details?

Struktur:

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

I bestimmten Bereich Wert überprüfen möchten vorhanden ist oder nicht. Wenn es anwesend ist, muss ich alle entsprechenden Details von der Struktur bekommen. Wenn es sich um eine Datenbanktabelle handelt, würde ich '11222456' >= HighRange and '11222456' <= LowRange verwenden. Aber ich weiß nicht, wie ich diese Struktur in Redis speichern soll. Damit ich in der Redis suchen kann, indem ich zwischendurch Wertebereich verwende.

Ich habe googeln, fand ich ZRANGE, ZRANGEBYSCORE. Aber diese sind nicht meine Bedürfnisse.

Bitte führen Sie mich, wie dieses Muster in Redis zu behandeln.

+0

Jede Zeile enthält sowohl hohe als auch niedrige Werte. – h0x91B

+0

Yes..High und Low Range-Wert sind in der gleichen Zeile. – sivasathish

Antwort

0

Ok, müssen Sie eine https://redis.io/topics/indexes#multi-dimensional-indexes

Diese Technik ermöglicht es Ihnen, Indizes für zwei oder mehr Dimensionen, wie XYZ zu machen. Ein bisschen kompliziert zu verstehen, aber lass es uns versuchen.

Lassen Sie uns sagen, dass Ihre LowRange X und Highrange ist Y Und unsere Daten ist wie folgt aussieht:

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

Wir ZSet machen und gleichenSCORE für jede Zeile verwenden, aber unser Wert verschachtelt Wert :

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

Wenn wir geben gleiche SCORE redis lexikalische Sortierung tun basierend auf dem Wert.

Verschachtelte Wert ... Zum Beispiel haben wir abc und xyz als Werte, und wir wollen, dass sie verschachteln, vor allem wir must make Polsterung, unsere so abc wird nun sein 0abc und xyz jetzt 0xyz ist, wenn wir Polsterung für 4 Zeichen natürlich.

Dann nehmen wir das erste Zeichen von der linken Seite des aufgefüllten Wertes 1 und fügen erstes Zeichen von Wert 2, dann zweites Zeichen, drittes usw. hinzu. Ergebnis ist 00axbycz.

So verschachtelt Wert von X 0100 Y 0200 ist 00120000, so dass unser ZSet Wert <interleavedXY>:<ID>

Jetzt wir Suchanfrage wie x >= 120 && x < 200 && y >= 220 && y < 270 mit ZRANGEBYLEX Befehl machen können (https://redis.io/commands/zrangebylex)

ZRANGEBYLEX ZSET:1 [00122200 [00220700 

Das Ergebnis wird :

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

Wir fanden ent ry 2 und 4.

Wir werden immer noch ausgehende unserer Suche in Code überprüfen müssen, aber es gibt sehr gute Ergebnisse.

Verwandte Themen