82

一致するパターンを持つすべてのキーの数を見つけるにはどうすればよいですか。

たとえば、 と の 2 つのキーがabc:random-text-1ありabc:random-text-2ます。ここでの一般的なパターンはabc:. したがって、ここではカウントは 2 です。

どうすればredisでこれを行うことができますか?

4

5 に答える 5

76

ここから:

eval "return #redis.pcall('keys', 'abc:*')" 0

O(1) ではありませんが、少なくともカウントはサーバー側で行われます。

于 2014-11-11T11:08:02.757 に答える
74

免責事項この古い回答が、何百万ものキーを持つ本番システムに損傷を与えていないことを願っています。なんらかの理由で本番環境で redis の一致するキーをカウントしたい場合は、 match pattern で scan を使用することをお勧めします。

redis クライアントで KEYS を使用して単純に検索すると、一致するすべてのキーの番号リストが表示されますよね?

例えば

KEYS abc:*

あなたにあげます

1) abc:random-text-1
2) abc:random-text-2

または、次を実行できます。

./redis-cli KEYS "abc:*" | wc -l

出力として得2られます。

于 2013-12-06T11:24:34.190 に答える
21

性能を考慮すると、使用をお勧めしませんKEYS

警告: KEYS は、細心の注意を払って本番環境でのみ使用する必要があるコマンドと考えてください。大規模なデータベースに対して実行すると、パフォーマンスが低下する可能性があります。このコマンドは、デバッグおよびキースペース レイアウトの変更などの特別な操作を目的としています。通常のアプリケーション コードでは KEYS を使用しないでください。キースペースのサブセットでキーを見つける方法を探している場合は、セットの使用を検討してください。

redis のバージョンが 2.8.0 を超える場合は、scanを検討することをお勧めします。ただし、使用するデータ型に依存します。

redis docの簡単な例を次に示します。

redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood
(integer) 6
redis 127.0.0.1:6379> sscan myset 0 match f*
1) "0"
2) 1) "foo"
   2) "feelsgood"
   3) "foobar"
于 2014-03-11T14:19:44.983 に答える