的有序集合十字路口,我要的位置三元组存储在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的(在相同的命令)。