Redisのキーの数を印刷する方法はありますか?
気がついた
keys *
しかし、それは少し重いようです。 -Redisがキーバリューストアであることを考えると、これが唯一の方法です。しかし、私はまだの線に沿って何かを見たいです
count keys *
サーバーに関する情報と統計を返すINFOコマンドを発行できます。出力例については、 here を参照してください。
MVChrのコメントで述べたように、info keyspace
をredis-cliで直接使用できます。
警告:本番マシンでは実行しないでください。
Linuxボックスの場合:
redis-cli KEYS "*" | wc -l
注:以下のコメントで述べたように、これはO(N)操作であるため、多くのキーを持つ大規模なDBではこれを使用しないでください。小規模な展開では、問題ないはずです。
キーのカウント総数を取得するには、以下のコマンドを使用します。
127.0.0.1:6379> DBSIZE
Redis 2.6以降、luaがサポートされているため、次のようなワイルドカードキーを多数取得できます。
eval "return #redis.call('keys', 'prefix-*')" 0
評価コマンド を参照
dbsize()
は、キーの総数を返します。
キーをランダムにサンプリングし、パターンのどの部分に一致するかをチェックすることにより、特定のパターンに一致するキーの数をすばやく推定できます。
Pythonの例; prefix_
で始まるすべてのキーをカウントします。
import redis
r = redis.StrictRedis(Host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter
私の場合、iter=100
でもかなりの見積もりが得られますが、keys prefix_
と比べると非常に高速です。
改善点は、すべてのリクエストで1000個のキーをサンプリングし、合計数を保持することです。これにより、2回のリクエスト後に2000で除算し、3回のリクエストで3000で除算します。一致するキーのかなり頻繁に、その後、真の値にますます近づく。
Redis 2.6以降、INFOコマンドの結果はセクションごとに分割されます。 「キースペース」セクションには、「キー」フィールドと「期限切れキー」フィールドがあり、キーの数が示されます。