データベース内のすべてのキーを取得するための Redis コマンドはありますか? いくつかの python-redis ライブラリがそれらを取得しているのを見てきました。しかし、redis-client から可能かどうか疑問に思っていました。
16 に答える
Redis 2.8 以降の更新
この質問に対する以前の回答のコメントで述べたように、KEYS
Redis サーバーはサービスを提供している間、他の操作を実行できなくなるため、潜在的に危険なコマンドです。もう 1 つのリスクKEYS
は、(キースペースのサイズに応じて) 応答バッファーを準備するために大量の RAM を消費し、サーバーのメモリを使い果たす可能性があることです。
Redis のバージョン 2.8 では、より丁寧で同じ目的に使用できるコマンドのSCANファミリが導入されました。
CLI は、それを操作するための優れた方法も提供します。
$ redis-cli --scan --pattern '*'
--> redis-cli からすべてのキーを取得
-redis 127.0.0.1:6379> keys *
-->パターンのリストを取得
-redis 127.0.0.1:6379> keys d??
これにより、「d」で始まる 3 文字のキーが生成されます。
-redis 127.0.0.1:6379> keys *t*
これにより、キーに「t」文字が一致するキーが取得されます
-->コマンドラインからキーを数える
-redis-cli keys * |wc -l
-->または、使用できます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
Laravel Framework を使用している場合は、次のように簡単に使用できます。
$allKeyList = Redis::KEYS("*");
print_r($allKeyList);
コア PHP では:
$redis = new Redis();
$redis->connect('hostname', 6379);
$allKeyList = $redis->keys('*');
print_r($allKeyList);