在Redis中,是否可以找到包含指定值的键的所有哈希?

在Redis中,是否可以找到包含指定值的键的所有哈希?,redis,jedis,Redis,Jedis,我用的是绝地武士,这对绝地武士和Redis本身来说都是新鲜事。我有一个存储散列的数据库,需要在数据库中查找包含具有指定键和指定值的项的所有键。例如:“查找数据库中键/值为STATUS=ERROR的所有哈希值”。这在绝地武士身上可能吗?从谷歌搜索中我可以看出,hscan将在指定的散列中查找密钥 更一般地说,通过教我钓鱼,你有什么建议可以在哪里找到这个吗?似乎没有真正的绝地api文档,甚至Redis文档本身似乎也没有任何关于hscan的内容。如您所述,您可以使用hscan从散列中查找指定的键值对。此

我用的是绝地武士,这对绝地武士和Redis本身来说都是新鲜事。我有一个存储散列的数据库,需要在数据库中查找包含具有指定键和指定值的项的所有键。例如:“查找数据库中键/值为STATUS=ERROR的所有哈希值”。这在绝地武士身上可能吗?从谷歌搜索中我可以看出,hscan将在指定的散列中查找密钥


更一般地说,通过教我钓鱼,你有什么建议可以在哪里找到这个吗?似乎没有真正的绝地api文档,甚至Redis文档本身似乎也没有任何关于hscan的内容。

如您所述,您可以使用
hscan
从散列中查找指定的键值对。此外,还需要使用
SCAN
命令查找所有散列

但是,这不是一个有效的解决方案。为了有效地实现目标,您需要构建一个额外的索引,即使用Redis
SET
保存具有指定键值对的所有哈希的键

HSET hash1 STATUS ERROR
// ...
// HSET other members
// ...
// add it to index
SADD status:error hash1
// get all hashes have the specified key-value pair
SMEMBERS status:error
更新:


正如@Itamar Haber在评论中提到的,如果您在
集合中有许多记录
,您应该使用
SSCAN
获取这些成员。因为在这种情况下,
SMEMBERS
可能会长时间阻止Redis。

“Redis文档本身似乎在hscan上没有任何内容”-hscan与SCAN非常相似。如此相似以至于对它进行专门的描述是没有意义的。吹毛求疵-出于所有明显的原因,您实际上希望使用
SSCAN
而不是
SMEMBERS