好吧,你需要一個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做基於價值詞彙的排序。
交錯值...例如,我們有abc
和xyz
的價值觀,我們希望他們交錯,首先我們必須化妝填充,所以我們現在abc
將0abc
和xyz
現在是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.
我們仍然需要在代碼中檢查我們的搜索出站,但它會給出非常好的結果。
每個「行」包含高和低範圍分數? – h0x91B
是的。高和低範圍值在同一行。 – sivasathish