利用可能なすべてのキーを取得するRedisコマンド?


502

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

回答:


721

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

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

時間の複雑さ: O(N)。Nはデータベース内のキーの数であり、データベース内のキー名と指定されたパターンの長さが制限されていると想定しています。

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


96
CLIの使用例redis-cli keys "*"
XåpplI'-I0llwlg'I -

4
修正:すべてのredisコマンドはシングルスレッドであり、サーバーをブロックします。唯一の違いはKEYS、大きなデータセットをクエリする場合にサーバーを長時間ブロックする可能性があることです
Leo

155

Redis 2.8以降用に更新

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

Redisのバージョン2.8でSCANが導入されましたファミリーのコマンドより洗練されており、同じ目的で使用できます。

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

$ redis-cli --scan --pattern '*'

59

redis-cliを使用してリモートredis-serverに接続してから、次のコマンドを実行する場合があります。

KEYS *

何も表示されていない、またはより良い、それは示しています:
(empty list or set)

使用するRedisサーバーがデータのあるサーバーであることが確実である場合は、redis-cliがRedisの正しいデータベースインスタンスに接続していない可能性があります。

Redisのドキュメントで言及されているように、新しい接続はデフォルトでdb 0に接続します。

私の場合KEYS、データベースが1だったため、コマンドは結果を取得していませんでした。目的のデータベースを選択するには、SELECTを使用します。
dbは整数で識別されます。

SELECT 1
KEYS *

以前の回答で私の問題を解決できなかったため、この情報を投稿します。


31

-> 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

ちょうど答えをコピーして試してみました。「不明なコマンド 'key'」が表示されました。「キー」はコマンドではなく、「キー」です。に修正key *t*してくださいkeys *t*
Kunal Dethe、2016年

その情報をありがとう、それは私の間違いでした。現在私はモバイルにいます。
デニー

これは非常に便利なチートシート
Hassan Baig


6

はい、これを使用してすべてのキーを取得できます

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})

4
OPが要求していた内容(redis-cli)とは異なりますが、それでも指摘していただきありがとうございます。
ヘリック

4

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

3
redis-cli -h <host> -p <port> keys * 

ここで*はすべてのキーをリストするパターンです


2
私は次のように、スターを引用しなければならなかった:redis-cli -h <host> -p <port> keys '*'
aggregate116​​6877

3

KEYSパターン

1.0.0以降で使用可能です。

時間の複雑さ:O(N)。Nはデータベース内のキーの数であり、データベース内のキー名と指定されたパターンの長さが制限されていると想定しています。

パターンに一致するすべてのキーを返します。

警告:このコマンドは、SCANまたはSETSを使用できる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"

1

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"

1

Redisですべてのキーを取得する

--scanオプションを使用してすべてのキーを取得します。

$ redis-cli --scan --pattern '*'

KEYSコマンドを使用してすべてのキーをリストします。

$ redis-cli KEYS '*'

0

redisサーバーで利用可能なすべてのキーを取得するには、redis-cliを開き、次のように入力する必要 KEYS * があります。さらにヘルプを得るには、このページにアクセスしてください: このリンク



0

Laravelフレームワークを使用している場合は、これを使用するだけです。

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

print_r($allKeyList);

コアPHPの場合:

$redis = new Redis();

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

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

print_r($allKeyList);

0

redis-cliを使用してredisサーバーに接続し、データベースを選択してKEYS *と入力するだけです。選択したredisデータベースに存在するすべてのキーが表示されることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.