2017-05-08 23 views
1

我想將以下結構詳細信息存儲在redis中。我想過使用redis HASH如何使用Redis中的值與結果一個細節之間的比較?

結構:

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

我要檢查特定的範圍值存在或不存在。如果存在,我必須從結構中獲取所有相應的細節。

如果這是一個數據庫表,我會使用'11222456' >= HighRange and '11222456' <= LowRange。但是,我不知道如何將這些結構存儲到Redis中。這樣我就可以在範圍值之間使用Redis進行搜索。我發現了,ZRANGEBYSCORE。但是,這些都不符合我的需求。

請親引導我,如何在Redis中處理這種模式。

+0

每個「行」包含高和低範圍分數? – h0x91B

+0

是的。高和低範圍值在同一行。 – sivasathish

回答

0

好吧,你需要一個https://redis.io/topics/indexes#multi-dimensional-indexes

這種技術可以讓你製作索引兩個或多個維度,如XYZ。有點複雜的理解,但讓我們試試。

比方說,你的LowRange是X和高變速爲Y 而我們的數據是這樣的:

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

我們做ZSET和使用相同SCORE的每一行,但我們的價值是交錯值:

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

當我們給同一SCORE的Redis做基於價值詞彙的排序。

交錯值...例如,我們有abcxyz的價值觀,我們希望他們交錯,首先我們必須化妝填充,所以我們現在abc0abcxyz現在是0xyz如果我們有填充4個字符當然。

然後我們從填充值1的左側取第一個字符並添加值爲2的第一個字符,然後是第二個字符,第三個等等。結果是00axbycz

因此,X 0100ÿ0200的交錯值是00120000,所以我們ZSET值<interleavedXY>:<ID>

現在我們可以使用ZRANGEBYLEX命令(https://redis.io/commands/zrangebylex

ZRANGEBYLEX ZSET:1 [00122200 [00220700 

其結果將是使搜索像x >= 120 && x < 200 && y >= 220 && y < 270

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

我們發現ry 2和4.

我們仍然需要在代碼中檢查我們的搜索出站,但它會給出非常好的結果。

相關問題