Answers:
已针对Redis 2.8及更高版本进行更新
如该问题先前答案的注释中所述,这KEYS
是一个潜在的危险命令,因为您的Redis服务器在服务期间将无法进行其他操作。另一个风险KEYS
是,它可能会消耗大量的RAM(取决于键空间的大小)来准备响应缓冲区,从而可能耗尽服务器的内存。
Redis 2.8版引入了SCAN系列命令,这些命令礼貌得多,可以用于相同的目的。
CLI还提供了一种很好的使用方式:
$ redis-cli --scan --pattern '*'
->从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
key *t*
为keys *t*
。
是的,您可以使用此命令获取所有密钥
var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);
redisClient.keys('*example*', function (err, keys) {
})
redis-cli -h <host> -p <port> keys *
*是列出所有键的模式
redis-cli -h <host> -p <port> keys '*'
按键模式
自1.0.0起可用。
时间复杂度:O(N),其中N为数据库中密钥的数目,假设数据库中的密钥名称和给定模式的长度有限。
返回所有与模式匹配的键。
警告:不建议使用此命令,因为在大型数据库而不是KEYS上执行时,它可能会破坏性能,您可以使用SCAN或SETS。
使用的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"
如果您的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"
我们应该在redis 2.8及更高版本上使用--scan --pattern。
您可以尝试在redis-cli之上使用此包装器。 https://github.com/VijayantSoni/redis-helper
如果您使用的是Laravel Framework,则可以使用以下代码:
$allKeyList = Redis::KEYS("*");
print_r($allKeyList);
在Core PHP中:
$redis = new Redis();
$redis->connect('hostname', 6379);
$allKeyList = $redis->keys('*');
print_r($allKeyList);
redis-cli keys "*"