Database 用HMSET查询REDIS

Database 用HMSET查询REDIS,database,data-structures,redis,node-redis,Database,Data Structures,Redis,Node Redis,我使用的是REDIS data store,我创建的HMSET如下: HMSET key:1 source 5 target 2 HMSET key:2 source 3 target 1 HMSET key:3 source 3 target 5 HMSET key:4 source 6 target 2 HMSET key:5 source 2 target 3 现在,我想根据提供的源和目标列表查询这些键。假设源和目标的列表为[2,3,6] 我想要一个像这样的问题 select f

我使用的是REDIS data store,我创建的HMSET如下:

HMSET key:1 source 5 target 2
HMSET key:2 source 3 target 1
HMSET key:3 source 3 target 5
HMSET key:4 source 6 target 2
HMSET key:5 source 2 target 3    
现在,我想根据提供的源和目标列表查询这些键。假设源和目标的列表为[2,3,6]

我想要一个像这样的问题

select from key where source in[2, 3, 6] and traget in[2, 3, 6]
这会给我这样的结果

key:4 source 6 target 2 
key:5 source 2 target 3
对于这样的数据集(只有几个集),您唯一的选择是迭代它们(在lua脚本中或通过提取到应用程序中),并通过检查散列自己进行过滤

为了加快速度,您可以维护二级索引(同样,这是您的工作)。比如:

SADD source:3 key:2 key:3
SADD target:2 key:1 key:4
然后,通过发出
SINTERSTORE
命令,您可以相对快速地找到所有匹配的键

SINTERSTORE found_keys source:2 source:3 source:6 target:2 target:3 target:6
您将在
found\u keys
名称下找到您要查找的密钥


尽管如此,如果您发现自己这样做了,您应该问问自己:为什么我不放弃使用一个支持SQL的数据库,因为我显然想要一个。

您的问题对于redis非常具体。问题中没有节点代码。因此,除了
[redis]
之外的所有标记都是不相关的,请删除它们以避免污染人们的问题源。我使用node redis作为客户端来执行相同的代码。我认为将node redis添加为标记是有意义的,但不确定它会增加多少价值。节点redis允许您执行全部redis命令,我猜?如果是这样的话,这并没有给问题增加任何信息。我们正在将一个写密集型模块从mongodb迁移到redis,用于临时数据存储。mongo中有一个read查询,我想将其转换为redis,这样我就可以用最少的更改获得相同的结果。无论如何,谢谢你的回复。