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

标签 redis jedis

我正在使用 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/

相关文章:

erlang - gen_server 中引发的 Redis 异常

configuration - 配置 Redis 以仅保留过去一天的 key

redis - 使用 Redis 的多参数匹配查找器

redis - Jedis如何使用套接字连接到redis服务器?

java - 需要一些 PUB/SUB Jedis 帮助 Bukkit

java - redis.clients.jedis.exceptions.JedisException : Could not return the resource to the pool

java - 无法从池中获取资源(SocketTimeoutException :)

python - 在 django 中管理 redis 连接的正确方法

spring - 如何查找 Redis 中可用的最大连接数以及使用了多少连接数和免费连接数?

message-queue - 如何使用 Celery 保证消息传递?