是否有一个Redis命令获取数据库中的所有键?我见过一些python-redis库获取它们。但我想知道从redis-client是否可以。
当前回答
针对Redis 2.8及以上版本更新
正如在之前回答这个问题的评论中所指出的,KEYS是一个潜在的危险命令,因为您的Redis服务器在服务时将不可用,无法执行其他操作。使用KEYS的另一个风险是,它可能会消耗(取决于密钥空间的大小)大量RAM来准备响应缓冲区,因此可能耗尽服务器的内存。
Redis的2.8版引入了SCAN系列命令,这些命令更加礼貌,可以用于相同的目的。
CLI还提供了一种很好的方式来使用它:
$ redis-cli --scan --pattern '*'
其他回答
我们应该在redis 2.8及以后的版本中使用——scan——pattern。
您可以尝试在redis-cli之上使用这个包装器。 https://github.com/VijayantSoni/redis-helper
如果你正在使用Laravel框架,那么你可以简单地使用这个:
$allKeyList = Redis::KEYS("*");
print_r($allKeyList);
在核心PHP:
$redis = new Redis();
$redis->connect('hostname', 6379);
$allKeyList = $redis->keys('*');
print_r($allKeyList);
试着看看KEYS命令。KEYS *将列出redis中存储的所有键。
编辑:请注意KEYS文档页顶部的警告:
时间复杂度:O(N), N为数据库中的键数,假设数据库中的键名和给定模式的长度有限。
UPDATE (V2.8或更高版本):SCAN是KEYS的更好替代方案,因为它不会阻塞服务器,也不会消耗大量资源。更喜欢使用它。
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中获得所有键
使用——scan选项获取所有键:
$ redis-cli --scan --pattern '*'
使用keys命令列出所有密钥:
$ redis-cli KEYS '*'
推荐文章
- 无法连接到Redis在127.0.0.1:6379:连接拒绝与自制
- 多Redis数据库的意义是什么?
- 如何列出所有的Redis数据库?
- 为什么我们需要像RabbitMQ这样的消息代理而不是像PostgreSQL这样的数据库?
- 检查Redis服务器版本
- Redis键命名约定?
- Linux—只安装redis-cli
- Redis只是一个缓存吗?
- 对持有错误类型值php的键进行操作
- WSL Redis遇到系统没有启动,systemd作为初始化系统(PID 1)。不能操作
- Redis使用的底层数据结构是什么?
- Redis字符串vs Redis哈希表示JSON:效率?
- 什么时候去Redis?什么时候使用MongoDB?
- 如何停止redis-server?
- 什么是Express.js?