データベース内のすべてのキーを取得するためのRedisコマンドはありますか?私はいくつかのpython-redisライブラリがそれらを取得しているのを見ました。しかし、それがredis-clientから可能かどうか疑問に思いました。
Redis 2.8以降用に更新
この質問に対する以前の回答のコメントで述べたように、KEYS
は、Redisサーバーがサービスを提供している間は他の操作を実行できないため、潜在的に危険なコマンドです。 KEYS
を使用した場合のもう1つのリスクは、レスポンスバッファを準備するために(キースペースのサイズによっては)RAMを大量に消費する可能性があることです。
Redisのバージョン2.8では、 _ scan _ /という一連のコマンドが導入されました。これらのコマンドは、はるかに丁寧で、同じ目的に使用できます。
CLIは、それを使用するための素晴らしい方法も提供します。
$ redis-cli --scan --pattern '*'
Redis-cliを使用して、リモートのredis-serverに接続してから、次のコマンドを実行することがあります。
KEYS *
何も表示されていません。(empty list or set)
あなたが使用するRedisサーバーがあなたがデータを持っているものであることを絶対に確信しているなら、多分あなたのredis-cliはRedis正しいデータベースインスタンスに接続していません。
Redisのドキュメントに記載されているように、新しい接続はデフォルトで db 0 に接続します。
私の場合、データベースが1なのでKEYS
コマンドは結果を取得できませんでした。必要なデータベースを選択するには、 _ select _ を使用します。
dbは整数で識別されます。
SELECT 1
KEYS *
これまでの回答で私の問題を解決できなかったので、この情報を掲載します。
- > redis-cliからすべてのキーを入手
-redis 127.0.0.1:6379> keys *
- >パターン一覧を取得する
-redis 127.0.0.1:6379> keys d??
これにより、3文字の「d」で始まるキーが生成されます。
-redis 127.0.0.1:6379> keys *t*
これはkeyに 't'という文字がマッチするキーを取得します。
- >コマンドラインからキーを数える
-redis-cli keys * |wc -l
- >あるいはdbsize
を使うことができます
-redis-cli dbsize
以下を見てください Redis Cheat Sheet 。 redis-cliでredisキーのサブセットを取得するには、次のコマンドを使います。
KEYS "prefix:*"
はい、これを使ってすべてのキーを取得できます
var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.Host);
redisClient.keys('*example*', function (err, keys) {
})
redis-cli -h <Host> -p <port> 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がクラスターの場合、このスクリプトを使用できます
#!/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"
KEYSパターン
1.0.0から利用可能です。
時間の複雑さ:O(N) Nはデータベース内のキーの数、データベース内のキー名および指定されたパターンの長さは限られていると仮定します。
パターンに一致するすべてのキーを返します。
警告: このコマンドは、KEYSの代わりに大規模データベースに対して実行するとパフォーマンスが低下する可能性があるため、使用をお勧めしません。 _ scan _ または _ sets _ を使用できます。
使用する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"
すべてのキーをredisサーバーで利用できるようにするには、redis-cliを開いて次のように入力してください。KEYS *
さらに助けを得るには、このページにアクセスしてください。 このリンク