是否有一个Redis命令获取数据库中的所有键?我见过一些python-redis库获取它们。但我想知道从redis-client是否可以。
尝试查看KEYS命令。KEYS *将列出所有存储在redis中的键。
KEYS
KEYS *
编辑:请注意KEYS文档页面顶部的警告:
时间复杂度: O(N),其中N是数据库中的键数,假设数据库中的键名和给定模式的长度有限。
更新(V2.8或更高版本): SCAN比KEYS更好,因为它不会阻塞服务器,也不会消耗大量资源。更喜欢使用它。
SCAN
针对Redis 2.8及以上版本更新
正如之前回答这个问题的评论中所指出的,KEYS是一个潜在的危险命令,因为您的Redis服务器在为它服务时将不可用,无法执行其他操作。使用KEYS的另一个风险是,它可能会消耗(取决于键空间的大小)大量RAM来准备响应缓冲区,因此可能耗尽服务器的内存。
Redis的2.8版引入了扫描系列命令,这些命令更加礼貌,可以用于相同的目的。
CLI还提供了一种很好的方式来使用它:
$ redis-cli --scan --pattern '*'
KEYS "prefix:*"
使用redis-cli,你可以连接到你的远程redis-server,然后命令:
没有显示任何东西,或者更好,它显示: # EYZ0 < / p >
如果你绝对确定你使用的Redis服务器就是你拥有数据的服务器,那么可能你的Redis -cli没有连接到正确的Redis数据库实例。
正如Redis文档中提到的,新连接默认连接到db 0。
在我的情况下KEYS命令没有检索结果,因为我的数据库是1。为了选择你想要的db,使用选择.
SELECT 1 KEYS *
我发布这个信息是因为之前的答案都没有解决我的问题。
是的,你可以通过使用这个得到所有的钥匙
var redis = require('redis'); redisClient = redis.createClient(redis.port, redis.host); redisClient.keys('*example*', function (err, keys) { })
——>从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
dbsize
-redis-cli dbsize
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
redis-cli -h <host> -p <port> keys *
哪里*是列出所有键的模式
键模式
自1.0.0起可用。 时间复杂度:O(N), N为数字 数据库中的键,假设键名在 数据库和给定模式的长度是有限的
自1.0.0起可用。
时间复杂度:O(N), N为数字 数据库中的键,假设键名在 数据库和给定模式的长度是有限的
返回所有匹配模式的键。
警告:这个命令不推荐使用,因为它可能会破坏对大型数据库执行的性能,而不是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"
如果你的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。
如果你正在使用Laravel框架,那么你可以简单地使用这个:
$allKeyList = Redis::KEYS("*"); print_r($allKeyList);
在核心PHP:
$redis = new Redis(); $redis->connect('hostname', 6379); $allKeyList = $redis->keys('*'); print_r($allKeyList);
你可以简单地连接到你的redis服务器使用redis-cli,选择你的数据库和类型键*,请记住它会给你所有的键,目前选定的redis数据库。
在Redis中获得所有键
使用——scan选项获取所有键:
使用keys命令列出所有密钥:
$ redis-cli KEYS '*'
对于那些需要typescript helper的人(使用ioredis)
import Redis from 'ioredis'; import { from, Observable, of } from 'rxjs'; import { first, mergeMap } from 'rxjs/operators'; export function scanKeysFromRedis(redisStore: Redis.Redis, key: string, target: number = 0, keys: string[] = []): Observable<string[]> { return from(redisStore.scan(target, 'MATCH', key)).pipe( first(), mergeMap((_keys) => { const _target = Number(_keys[0]); if (_target !== 0) { return scanKeysFromRedis(redisStore, key, _target, [...keys, ..._keys[1]]); } return of([...keys, ..._keys[1]]); }), ); }
并调用它:scanKeysFromRedis(商店,“你好”);