首页 文章

Redis命令获取所有可用密钥?

提问于
浏览
386

是否有Redis命令用于获取数据库中的所有密钥?我看到一些python-redis库获取它们 . 但是想知道redis-client是否有可能 .

9 回答

  • 3

    为了获得redis服务器中的所有密钥,您应该打开redis-cli并输入: KEYS * 为了获得更多帮助,请访问此页面:This Link

  • 0

    试着看KEYS命令 . KEYS * 将列出存储在redis中的所有密钥 .

    EDIT: 请注意 KEYS 文档页面顶部的警告:

    时间复杂度:O(N),其中N是数据库中的密钥数,假设数据库中的密钥名称和给定模式的长度有限 .

    UPDATE (V2.8 or greater): SCANKEYS 的优越替代品,因为它不会阻止服务器,也不会消耗大量资源 . 更喜欢使用它 .

  • 579
    • 从redis-cli获取所有密钥

    -redis 127.0.0.1:6379> keys *
    
    • 获取模式列表

    -redis 127.0.0.1:6379> keys d??
    

    这将产生以'd'开头的三个字符的键 .

    -redis 127.0.0.1:6379> keys *t*
    

    这将获得键中匹配't'字符的键

    • 从命令行计数键

    -redis-cli keys * |wc -l
    
    • 或者你可以使用 dbsize

    -redis-cli dbsize
    
  • 123

    是的,您可以使用此功能获取所有密钥

    var redis = require('redis');
    redisClient = redis.createClient(redis.port, redis.host);    
      redisClient.keys('*example*', function (err, keys) {
    })
    
  • 7

    SCAN不要求客户端像KEYS那样将所有密钥加载到内存中 . SCAN为您提供了一个可以使用的迭代器 . 我的redis中有一条1B记录,我永远无法获得足够的内存来立即返回所有密钥 .

    这是一个python片段,用于从商店获取与模式匹配的所有键并删除它们:

    import redis
    r = redis.StrictRedis(host='localhost', port=6379, db=0)
    for key in r.scan_iter("key_pattern*"):
        print key
    
  • 16

    Updated for Redis 2.8 and above

    正如此问题的先前答案的评论中所述, KEYS 是一个潜在危险的命令,因为Redis服务器在提供服务时无法执行其他操作 . KEYS 的另一个风险是它可以消耗(取决于键空间的大小)大量的RAM来准备响应缓冲区,从而可能耗尽服务器的内存 .

    Redis的2.8版本引入了SCAN系列命令,这些命令更有礼貌并且可以用于相同的目的 .

    CLI还提供了一种很好的方式来处理它:

    $ redis-cli --scan --pattern '*'
    
  • 29

    看看下面的Redis Cheat Sheet . 要使用redis-cli获取redis密钥的子集,请使用该命令

    KEYS "prefix:*"
    
  • 19
    redis-cli -h <host> -p <port> keys *
    

    其中*是列出所有键的模式

  • 2

    可能会发生使用redis-cli,连接到远程redis-server,然后命令:

    KEYS *
    

    没有显示任何内容,或更好,它显示:
    (empty list or set)

    如果您完全确定您使用的Redis服务器是您拥有数据的服务器,则可能您的redis-cli未连接到Redis正确的数据库实例 .

    正如Redis文档中提到的,新连接默认连接到 db 0 .

    在我的情况下 KEYS 命令没有检索结果,因为我的数据库是1.为了选择你想要的数据库,使用SELECT .
    db由整数标识 .

    SELECT 1
    KEYS *
    

    我发布此信息是因为以前的答案都没有解决我的问题 .

相关问题