【问题标题】:Querying REDIS with HMSET使用 HMSET 查询 REDIS
【发布时间】:2015-12-18 04:28:57
【问题描述】:

我正在使用 REDIS 数据存储,并且我创建了 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

【问题讨论】:

  • 您的问题非常具体到redis。问题中没有节点代码。所以除了[redis]之外的所有标签都无关紧要,请删除它们以免污染人们的问题提要。
  • 我使用 node-redis 作为客户端来执行相同的代码。我认为将 node-redis 添加为标签是有意义的。
  • 不确定它增加了多少价值。我假设 node-redis 允许你执行所有的 redis 命令?如果是这样,它不会向问题添加任何信息。

标签: database data-structures redis node-redis


【解决方案1】:

对于这样的数据集(只有几组),您唯一的选择是迭代它们(在 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_keys 名称下寻找的密钥。

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

【讨论】:

  • 我们正在将一个写入密集型模块从 mongodb 迁移到 redis 用于临时数据存储。 mongo 中有一个读取查询,我想将其转换为 redis,以便以最小的更改实现相同的结果。无论如何,感谢您的回复。
猜你喜欢
  • 2013-08-28
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2015-07-24
  • 1970-01-01
  • 2020-03-18
  • 2018-03-16
相关资源
最近更新 更多