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


501

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

Answers:


720

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

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

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

UPDATE(V2.8或更高版本): 从某种意义上说,它既不会阻塞服务器,也不会消耗大量资源,因此SCAN是的上乘替代品KEYS。优先使用它。


96
CLI使用示例redis-cli keys "*"
XåpplI'-I0llwlg'I -

4
更正:所有redis命令均为单线程,将阻止服务器。唯一的区别是KEYS查询较大的数据集时,可能会阻塞服务器更长的时间
Leo

155

已针对Redis 2.8及更高版本进行更新

如该问题先前答案的注释中所述,这KEYS是一个潜在的危险命令,因为您的Redis服务器在服务期间将无法进行其他操作。另一个风险KEYS是,它可能会消耗大量的RAM(取决于键空间的大小)来准备响应缓冲区,从而可能耗尽服务器的内存。

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

CLI还提供了一种很好的使用方式:

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

59

使用redis-cli,您可能会连接到远程redis-server,然后执行以下命令:

KEYS *

没有显示任何东西,或者更好,它显示:
(empty list or set)

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

如Redis文档中所述,新连接默认连接到db 0

在我的情况KEYS下,由于数据库为1,所以命令未检索结果。要选择所需的数据库,请使用SELECT
db由整数标识。

SELECT 1
KEYS *

我发布此信息是因为先前的答案都无法解决我的问题。


31

->从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'”。“ key”不是命令,“ keys”是命令。请更正key *t*keys *t*
Kunal Dethe

感谢花花公子提供的信息。这是我的错误。当前我在移动设备上。我将更改此命令。
丹尼

非常有用的备忘单
哈桑·拜格


6

是的,您可以使用此命令获取所有密钥

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

4
并非OP到底在问什么(redis-cli),但仍然感谢您指出这一点。
赫里克

4

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

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

*是列出所有键的模式


2
我不得不引用星,如下所示:redis-cli -h <host> -p <port> keys '*'
aggregate116​​6877

3

按键模式

自1.0.0起可用。

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

返回所有与模式匹配的键。

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

使用的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"

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"

1

获取Redis中的所有密钥

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

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

使用KEYS命令列出所有键:

$ redis-cli KEYS '*'

0

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



0

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

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

print_r($allKeyList);

在Core PHP中:

$redis = new Redis();

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

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

print_r($allKeyList);

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.