的有序集合十字路口,我要的位置三元組存儲在Redis的數據存儲,但想要讓他們搜索的爲好。這將使得有可能進行範圍查詢,例如'給我點1 < x 3和y> 2'。因此,我使用了有序集合的組合。Redis的:按分數
每個三元組被保存在Redis的像這樣(其中x = 1,Y = 2例如,位置A,Z = 3):
hset /locations/A x "1"
hset /locations/A y "2"
hset /locations/A z "3"
hset /locations/A payload "{ ...some json payload... }"
zadd /locations:x 1 locations/A
zadd /locations:y 2 locations/A
zadd /locations:z 3 locations/A
這樣,我可以很容易地找到的所有位置(或路徑,以地點)與例如x值介於4和5之間:
zrangebyscore /locations:x 4 5
或者所有具有例如1至3之間的Y值:
zrangebyscore /locations:x 1 3
當我嘗試搭配4,5及1和3之間的Y值之間的x值的所有位置出現問題,因爲那時我要做兩個查詢到Redis,隨後將這些值與NodeJS中的Javascript進行比較,當定義了很多位置時這可能非常耗時。有沒有人遇到過這樣的問題?
我嘗試用zinterstore和zunionstore,但還沒有找到一個滿意的解決方案呢。我認爲zrangebyscores存儲到一個臨時組,然後做一個zinterstore,但沒有找到一個Redis的命令存儲zrangebyscore的直接輸出到Redis的(在相同的命令)。