web-dev-qa-db-ja.com

利用可能なすべてのキーを取得するようにRedisコマンドを実行しますか?

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

428
Lalith

KEYS commandを見てみてください。 KEYS *は、redisに格納されているすべてのキーを一覧表示します。

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

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

UPDATE(V2.8以降): SCAN は、サーバーをブロックしたり、重要なリソースを消費したりしないという意味で、KEYSに代わる優れた選択肢です。それを使用することを好む。

632
yojimbo87

Redis 2.8以降用に更新

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

Redisのバージョン2.8では、 _ scan _ /という一連のコマンドが導入されました。これらのコマンドは、はるかに丁寧で、同じ目的に使用できます。

CLIは、それを使用するための素晴らしい方法も提供します。

$ redis-cli --scan --pattern '*'
135
Itamar Haber

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

KEYS *

何も表示されていません。
(empty list or set)

あなたが使用するRedisサーバーがあなたがデータを持っているものであることを絶対に確信しているなら、多分あなたのredis-cliはRedis正しいデータベースインスタンスに接続していません。

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

私の場合、データベースが1なのでKEYSコマンドは結果を取得できませんでした。必要なデータベースを選択するには、 _ select _ を使用します。
dbは整数で識別されます。

SELECT 1
KEYS *

これまでの回答で私の問題を解決できなかったので、この情報を掲載します。

40
Evhz

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

以下を見てください Redis Cheat Sheet 。 redis-cliでredisキーのサブセットを取得するには、次のコマンドを使います。

KEYS "prefix:*"
17
wami

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

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.Host);    
  redisClient.keys('*example*', function (err, keys) {
})
6
Albin Mathew
redis-cli -h <Host> -p <port> keys * 

*はすべてのキーを一覧表示するパターンです。

3
gobi

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

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

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"
0
anandchaugule

すべてのキーをredisサーバーで利用できるようにするには、redis-cliを開いて次のように入力してください。KEYS *さらに助けを得るには、このページにアクセスしてください。 このリンク

0
behzad babaei