我正在使用 Jedis,对它和 Redis 本身都是新手。我有存储哈希值的数据库,需要在数据库中找到包含具有指定键和指定值的条目的所有键。例如:“在数据库中找到所有键/值为 STATUS=ERROR 的散列”。这在绝地武士中可能吗?从我通过谷歌搜索可以看出,hscan 将在指定的哈希中找到键。
更一般地说,通过教我钓鱼,有什么关于在哪里查找的指示吗?似乎没有真正的 jedis 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 在评论中提到的,如果您在SET
中有很多记录,您应该使用SSCAN
来获取这些成员。因为在这种情况下,SMEMBERS
可能会长时间阻塞 Redis。
关于redis - 在 Redis 中是否可以找到所有具有包含指定值的键的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51956794/