是否有Redis命令用于获取数据库中的所有密钥?我看到一些python-redis库获取它们。但是想知道redis-client是否有可能。
答案 0 :(得分:633)
尝试查看KEYS
命令。 KEYS *
将列出存储在redis中的所有密钥。
编辑:请注意KEYS
文档页面顶部的警告:
时间复杂度: O(N),其中N是数据库中的键数,假设数据库中的键名和给定模式的长度有限。
UPDATE(V2.8或更高版本): SCAN
是KEYS
的高级替代品,因为它不会阻止服务器,也不会消耗大量资源资源。更喜欢使用它。
答案 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为数字 假设数据库中的键名称位于 数据库和给定的模式长度有限。
返回所有匹配模式的键。
警告::不建议使用此命令,因为在大型数据库而不是可以使用SCAN或SETS的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');