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

时间:2011-03-09 21:00:36

标签: redis redis-cli

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

15 个答案:

答案 0 :(得分:633)

尝试查看KEYS命令。 KEYS *将列出存储在redis中的所有密钥。

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

  

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

UPDATE(V2.8或更高版本): SCANKEYS的高级替代品,因为它不会阻止服务器,也不会消耗大量资源资源。更喜欢使用它。

答案 1 :(得分:135)

针对Redis 2.8及以上版本进行了更新

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

Redis 2.8版引入了SCAN系列命令,这些命令更有礼貌,可以用于同一目的。

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

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

答案 2 :(得分:23)

- >从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*

这将获得匹配的密钥'密钥中的字符

- >通过

从命令行计数键
-redis-cli keys * |wc -l

- >或者您可以使用dbsize

-redis-cli dbsize

答案 3 :(得分:17)

查看以下Redis Cheat Sheet。 要使用redis-cli获取redis密钥的子集,请使用命令

KEYS "prefix:*"

答案 4 :(得分:6)

是的,您可以使用此

获取所有密钥
var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})

答案 5 :(得分:6)

获取Redis中的所有键

使用--scan选项获取所有密钥:

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

使用KEYS命令列出所有键:

$ redis-cli KEYS '*'

答案 6 :(得分:3)

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

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

{{1}}

答案 7 :(得分:3)

redis-cli -h <host> -p <port> keys * 

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

答案 8 :(得分:1)

如果redis是集群,则可以使用此脚本

#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")

arr=($(echo "$redis_list" | tr ',' '\n'))

for info in ${arr[@]}; do
  echo "start :${info}"
  redis_info=($(echo "$info" | tr ':' '\n'))
  ip=${redis_info[0]}
  port=${redis_info[1]}
  echo "ip="${ip}",port="${port}
  redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
  redis-cli -c -h $ip -p $port keys \*

done

echo "end"

答案 9 :(得分:0)

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

答案 10 :(得分:0)

KEYS模式

  

自1.0.0起可用。

     

时间复杂度:O(N),N为数字   假设数据库中的键名称位于   数据库和给定的模式长度有限。

返回所有匹配模式的键。

警告::不建议使用此命令,因为在大型数据库而不是可以使用SCANSETS的KEY上执行时,它可能会破坏性能。 / p>

要使用的KEYS命令示例:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"

答案 11 :(得分:0)

我们应该在Redis 2.8及更高版本上使用--scan --pattern。

您可以尝试在redis-cli之上使用此包装器。 https://github.com/VijayantSoni/redis-helper

答案 12 :(得分:0)

如果您使用的是Laravel Framework,则可以简单地使用以下代码:

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

在Core PHP中:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);

答案 13 :(得分:0)

您可以简单地使用redis-cli连接到Redis服务器,选择数据库并键入KEYS *,请记住,它将为您提供所选Redis数据库中存在的所有密钥。

答案 14 :(得分:0)

对于需要打字稿助手的人(使用ioredis)

from mptt.models import MPTTModel, TreeForeignKey

class Category(MPTTModel):
    parent = TreeForeignKey('self', on_delete=models.CASCADE, blank=True,
        null=True, related_name='children',
    )
    name = models.CharField(max_length=255)
    tcgplayer_category = models.ForeignKey('tcgplayer.TcgCategory', on_delete=models.PROTECT,
        blank=True, null=True)

    class Meta:
        unique_together = (
            ('parent', 'name'),
        )

    def __str__(self):
        return self.name

    class MPTTMeta:
        order_insertion_by = ['name']

并调用它:scanKeysFromRedis(store, 'hello');