是否有Redis命令用于获取数据库中的所有密钥?我看到一些python-redis库获取它们 . 但是想知道redis-client是否有可能 .
为了获得redis服务器中的所有密钥,您应该打开redis-cli并输入: KEYS * 为了获得更多帮助,请访问此页面:This Link
KEYS *
试着看KEYS命令 . KEYS * 将列出存储在redis中的所有密钥 .
EDIT: 请注意 KEYS 文档页面顶部的警告:
KEYS
时间复杂度:O(N),其中N是数据库中的密钥数,假设数据库中的密钥名称和给定模式的长度有限 .
UPDATE (V2.8 or greater): SCAN是 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
是的,您可以使用此功能获取所有密钥
var redis = require('redis'); redisClient = redis.createClient(redis.port, redis.host); redisClient.keys('*example*', function (err, 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
Updated for Redis 2.8 and above
正如此问题的先前答案的评论中所述, KEYS 是一个潜在危险的命令,因为Redis服务器在提供服务时无法执行其他操作 . KEYS 的另一个风险是它可以消耗(取决于键空间的大小)大量的RAM来准备响应缓冲区,从而可能耗尽服务器的内存 .
Redis的2.8版本引入了SCAN系列命令,这些命令更有礼貌并且可以用于相同的目的 .
CLI还提供了一种很好的方式来处理它:
$ redis-cli --scan --pattern '*'
看看下面的Redis Cheat Sheet . 要使用redis-cli获取redis密钥的子集,请使用该命令
KEYS "prefix:*"
redis-cli -h <host> -p <port> keys *
其中*是列出所有键的模式
可能会发生使用redis-cli,连接到远程redis-server,然后命令:
没有显示任何内容,或更好,它显示:(empty list or set)
(empty list or set)
如果您完全确定您使用的Redis服务器是您拥有数据的服务器,则可能您的redis-cli未连接到Redis正确的数据库实例 .
正如Redis文档中提到的,新连接默认连接到 db 0 .
在我的情况下 KEYS 命令没有检索结果,因为我的数据库是1.为了选择你想要的数据库,使用SELECT .db由整数标识 .
SELECT 1 KEYS *
我发布此信息是因为以前的答案都没有解决我的问题 .
9 回答
为了获得redis服务器中的所有密钥,您应该打开redis-cli并输入:
KEYS *
为了获得更多帮助,请访问此页面:This Link试着看KEYS命令 .
KEYS *
将列出存储在redis中的所有密钥 .EDIT: 请注意
KEYS
文档页面顶部的警告:UPDATE (V2.8 or greater): SCAN是
KEYS
的优越替代品,因为它不会阻止服务器,也不会消耗大量资源 . 更喜欢使用它 .这将产生以'd'开头的三个字符的键 .
这将获得键中匹配't'字符的键
是的,您可以使用此功能获取所有密钥
SCAN不要求客户端像KEYS那样将所有密钥加载到内存中 . SCAN为您提供了一个可以使用的迭代器 . 我的redis中有一条1B记录,我永远无法获得足够的内存来立即返回所有密钥 .
这是一个python片段,用于从商店获取与模式匹配的所有键并删除它们:
Updated for Redis 2.8 and above
正如此问题的先前答案的评论中所述,
KEYS
是一个潜在危险的命令,因为Redis服务器在提供服务时无法执行其他操作 .KEYS
的另一个风险是它可以消耗(取决于键空间的大小)大量的RAM来准备响应缓冲区,从而可能耗尽服务器的内存 .Redis的2.8版本引入了SCAN系列命令,这些命令更有礼貌并且可以用于相同的目的 .
CLI还提供了一种很好的方式来处理它:
看看下面的Redis Cheat Sheet . 要使用redis-cli获取redis密钥的子集,请使用该命令
其中*是列出所有键的模式
可能会发生使用redis-cli,连接到远程redis-server,然后命令:
没有显示任何内容,或更好,它显示:
(empty list or set)
如果您完全确定您使用的Redis服务器是您拥有数据的服务器,则可能您的redis-cli未连接到Redis正确的数据库实例 .
正如Redis文档中提到的,新连接默认连接到 db 0 .
在我的情况下
KEYS
命令没有检索结果,因为我的数据库是1.为了选择你想要的数据库,使用SELECT .db由整数标识 .
我发布此信息是因为以前的答案都没有解决我的问题 .