Lal*_*ith 470 redis redis-cli redis-commands
是否有Redis命令用于获取数据库中的所有密钥?我看到一些python-redis库获取它们.但是想知道redis-client是否有可能.
yoj*_*o87 673
试着看看KEYS命令.KEYS *将列出存储在redis中的所有密钥.
编辑:请注意KEYS文档页面顶部的警告:
时间复杂度: O(N),其中N是数据库中的密钥数,假设数据库中的密钥名称和给定模式的长度有限.
更新(V2.8或更高版本): SCAN是一种更好的替代方案KEYS,因为它不会阻塞服务器,也不会占用大量资源.更喜欢使用它.
Ita*_*ber 147
针对Redis 2.8及更高版本进行了更新
正如此问题的先前答案的评论中所述,KEYS由于您的Redis服务器在提供服务时无法执行其他操作,因此这是一个潜在危险的命令.另一个风险KEYS是它可以消耗(取决于你的密钥空间的大小)大量的RAM来准备响应缓冲区,从而可能耗尽服务器的内存.
Redis的2.8版引入了SCAN系列命令,这些命令更有礼貌,可以用于相同的目的.
CLI还提供了一种很好的方法来处理它:
$ redis-cli --scan --pattern '*'
Run Code Online (Sandbox Code Playgroud)
Evh*_*vhz 50
可能会发生使用redis-cli,连接到远程redis-server,然后命令:
KEYS *
Run Code Online (Sandbox Code Playgroud)
没有显示任何内容,或更好,它显示:
(empty list or set)
如果您完全确定您使用的Redis服务器是您拥有数据的服务器,则可能您的redis-cli未连接到Redis正确的数据库实例.
正如Redis文档中提到的,新连接默认连接到db 0.
在我的情况下,KEYS命令没有检索结果,因为我的数据库是1.为了选择所需的数据库,请使用SELECT.
db由整数标识.
SELECT 1
KEYS *
Run Code Online (Sandbox Code Playgroud)
我发布此信息是因为以前的答案都没有解决我的问题.
den*_*nny 27
- >从redis-cli获取所有密钥
-redis 127.0.0.1:6379> keys *
Run Code Online (Sandbox Code Playgroud)
- >获取模式列表
-redis 127.0.0.1:6379> keys d??
Run Code Online (Sandbox Code Playgroud)
这将生成以"d"开头的三个字符的键.
-redis 127.0.0.1:6379> keys *t*
Run Code Online (Sandbox Code Playgroud)
这将获得键中匹配't'字符的键
- >从命令行计数键
-redis-cli keys * |wc -l
Run Code Online (Sandbox Code Playgroud)
- >或者你可以使用 dbsize
-redis-cli dbsize
Run Code Online (Sandbox Code Playgroud)
wam*_*ami 17
看看以下Redis Cheat Sheet.要使用redis-cli获取redis密钥的子集,请使用该命令
KEYS "prefix:*"
Run Code Online (Sandbox Code Playgroud)
获取Redis中的所有键
使用 --scan 选项获取所有密钥:
$ redis-cli --scan --pattern '*'
Run Code Online (Sandbox Code Playgroud)
使用 KEYS 命令列出所有键:
$ redis-cli KEYS '*'
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用此功能获取所有密钥
var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);
redisClient.keys('*example*', function (err, keys) {
})
Run Code Online (Sandbox Code Playgroud)
redis-cli -h <host> -p <port> keys *
Run Code Online (Sandbox Code Playgroud)
其中 * 是列出所有键的模式
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
Run Code Online (Sandbox Code Playgroud)
按键模式
自 1.0.0 起可用。
时间复杂度:O(N),其中 N 是数据库中键的数量,假设数据库中的键名称和给定模式的长度有限。
返回与模式匹配的所有键。
警告:不建议使用此命令,因为当针对大型数据库而不是可以使用SCAN或SETS的 KEYS 执行该命令时,它可能会破坏性能。
要使用的 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"
Run Code Online (Sandbox Code Playgroud)