604

データベース内のすべてのキーを取得するための Redis コマンドはありますか? いくつかの python-redis ライブラリがそれらを取得しているのを見てきました。しかし、redis-client から可能かどうか疑問に思っていました。

4

16 に答える 16

845

コマンドを見てみてくださいKEYSKEYS *redis に保存されているすべてのキーを一覧表示します。

編集:KEYSドキュメントページの上部にある警告に注意してください:

時間計算量: O(N) (N はデータベース内のキーの数)。データベース内のキー名と特定のパターンの長さが制限されていると仮定します。

UPDATE (V2.8 以降): サーバーをブロックせず、大量のリソースを消費しないという意味で、SCANの優れた代替手段です。KEYSそれを使用することをお勧めします。

于 2011-03-09T21:40:41.547 に答える
182

Redis 2.8 以降の更新

この質問に対する以前の回答のコメントで述べたように、KEYSRedis サーバーはサービスを提供している間、他の操作を実行できなくなるため、潜在的に危険なコマンドです。もう 1 つのリスクKEYSは、(キースペースのサイズに応じて) 応答バッファーを準備するために大量の RAM を消費し、サーバーのメモリを使い果たす可能性があることです。

Redis のバージョン 2.8 では、より丁寧で同じ目的に使用できるコマンドのSCANファミリが導入されました。

CLI は、それを操作するための優れた方法も提供します。

$ redis-cli --scan --pattern '*'
于 2014-05-26T21:21:35.467 に答える
40

--> 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
于 2016-06-27T04:42:13.500 に答える
6

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
于 2016-09-28T20:22:04.850 に答える
0

Laravel Framework を使用している場合は、次のように簡単に使用できます。

$allKeyList = Redis::KEYS("*");

print_r($allKeyList);

コア PHP では:

$redis = new Redis();

$redis->connect('hostname', 6379);

$allKeyList = $redis->keys('*');

print_r($allKeyList);
于 2020-02-18T19:30:09.553 に答える