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

时间:2018-08-21 21:14:11

标签: redis jedis

我正在使用Jedis,这是Redis本身的新手。我有一个存储哈希值的数据库,需要在数据库中查找所有包含具有指定键和指定值的条目的键。 EG:“在数据库中找到所有键/值均为STATUS = ERROR的散列”。在杰迪斯有可能吗?根据我在谷歌搜索中看到的信息,hscan将在指定的哈希中找到密钥。

更一般而言,通过教我钓鱼的方式,有什么指针可以在哪里查找?似乎没有真正的jedis api文档,甚至Redis文档本身似乎在hscan上也没有任何内容。

1 个答案:

答案 0 :(得分:1)

如前所述,您可以使用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在评论中提到的,如果SET中有很多记录,则应使用SSCAN来获取这些成员。由于在这种情况下,SMEMBERS可能会长时间阻止Redis。