【问题标题】:Get all hashes exists in redis获取redis中存在的所有hash
【发布时间】:2017-04-29 10:30:58
【问题描述】:

我在 redis 缓存中有哈希值,例如:

Hash         Key    Value
hashme:1    Hello   World
hashme:2    Here    Iam
myhash:1    Next    One

我的目标是将哈希作为 CLI 中的输出,例如:

hashme
myhash

如果没有这个选项,这也可以:

 hashme:1
 hashme:2
 myhash:1

我在 Redis API 中没有找到任何相关的命令。

有什么建议吗?

【问题讨论】:

    标签: redis redis-cli


    【解决方案1】:

    您可以使用SCAN 命令从 Redis 获取所有密钥。然后对于每个键,使用TYPE 命令来检查它是否是一个哈希。

    更新:

    在 Redis 6.0 中,SCAN 命令支持 TYPE 子命令,您可以使用该子命令扫描指定类型的所有键:

    SCAN 0 TYPE hash
    

    也千万不要在生产环境中使用KEYS 命令!!!这是一个危险的命令,可能会长时间阻塞 Redis。

    【讨论】:

    • 您能否进一步解释一下我需要执行的命令集是什么?
    • SCAN 命令用于增量迭代 Redis 中的键。使用此命令,您可以获取 Redis 中的所有密钥。 TYPE 命令用于获取密钥的类型。请参阅文档了解更多详细信息。
    【解决方案2】:
    keys * 
    

    对我有用。你可以试试。

    【讨论】:

    • 键是坏的!它应该仅用于调试,应避免在生产服务器上使用
    【解决方案3】:

    redis(和其他 K/v 存储)的想法是为您构建索引。数据库不会为你做这件事。这是与关系数据库的主要区别,有助于提高性能。

    因此,当您的应用创建哈希时,请将其密钥放入 SET 中。当您的应用删除哈希时,请从 SET 中删除其密钥。然后要获取哈希 ID 列表,只需使用 SMEMBERS 获取 SET 的内容即可。

    【讨论】:

    • 这是一个很好的解决方法,但我不想在我的应用程序中编写代码只是为了这种情况。
    • 它不是一种解决方法,它是你必须如何做的。您负责通常使用 SET 构建和管理自己的索引 - 因此,如果您需要能够检索与您的应用程序(例如用户)相关的某种类型的所有 HASH,您需要保留一个名为 users 的 SET,您可以在其中添加/根据需要删除您的 HASH 密钥
    • 这两个答案都可能有效,具体取决于上下文。我们在问题中没有足够的上下文信息来知道哪个更好(例如:它们在数据库中有多少键?是否在生产中?等等)
    【解决方案4】:

    connection.keys('*') 这将带来所有的键,而与数据类型无关,因为 redis 中的所有内容都以键值格式存储

    【讨论】:

    • 警告:将 KEYS 视为仅应极其小心地在生产环境中使用的命令。当它针对大型数据库执行时,它可能会破坏性能。此命令用于调试和特殊操作,例如更改键空间布局。不要在常规应用程序代码中使用 KEYS。如果您正在寻找一种在键空间子集中查找键的方法,请考虑使用 SCAN 或集合。
    【解决方案5】:

    对于 Python 中的 redis,您可以使用以下命令从 redis db 中检索密钥

    def standardize_list(bytelist):
        return [x.decode('utf-8') for x in bytelist]
    
    >>> standardize_list(r.keys())
    ['hat:1236154736', 'hat:56854717', 'hat:1326692461']
    
    

    这里r变量是redis连接对象

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 1970-01-01
      • 2015-04-27
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2014-03-10
      • 1970-01-01
      相关资源
      最近更新 更多