4

いくつかのセットを含むRedisデータベースがあり、すべて共通のキーパターンで識別されます。たとえば、「myset:」としましょう。

コマンドラインクライアントから、含まれている要素の数ですべてのセットを並べ替えて、その情報を返す方法はありますか?私が理解している限り、SORTコマンドは単一のキーしか取りません。

プログラミング言語で簡単にできることは知っていますが、サーバーにドライバーやプログラミング環境などをインストールしなくてもできるようにしたいと思っています。

ご協力いただきありがとうございます。

4

2 に答える 2

5

いいえ、これを行う簡単なトリックはありません。

Redisはストアであり、実際にはデータベース管理システムではありません。クエリ言語はサポートされていません。データを取得する必要がある場合は、アクセスパスを予測し、それに応じてデータ構造を設計する必要があります。

たとえば、あなたの例では、関心のあるセットからアイテムを追加/削除しながらzsetを維持できます。このzsetでは、値がセットのキーになり、セットのカーディナリティをスコアリングします。

zsetのコンテンツをランクで取得すると、カーディナリティでソートされたセットが得られます。

このアクセスパスを計画していなくてもデータが必要な場合は、プログラミング言語を使用する以外に選択肢はありません。Redisドライバーをインストールできない場合は、Redisダンプファイル(BGSAVEコマンドによって生成される)から作業し、このファイルを別のボックスにダウンロードし、Sripathi Krishnanの次のパッケージを使用して解析し、統計を計算できます。必要とする。

https://github.com/sripathikrishnan/redis-rdb-tools

于 2012-09-10T09:19:02.650 に答える
3

警告:この回答のアプローチは、一般的な解決策として意図されたものではkeysありません。実稼働環境では、コマンドの使用は推奨されないことに注意してください。

とは言うものの、これは、セット名の後にその長さ(カーディナリティ)をカーディナリティでソートして出力するソリューションです。

# Capture the names of the keys (sets)
KEYS=$(redis-cli keys 'myset:*')

# Paste each line from the key names with the output of `redis-cli scard key`
# and sort on the second key - the size - in reverse

paste <(echo "$KEYS") <(echo "$KEYS" | sed 's/^/scard /' | redis-cli) | sort -k2 -r -n

paste上記のコマンドの使用に注意してください。redis-cli結果を順番に送ってくれると期待していますが、きっとそうなると思います。したがって、redis出力からpaste1つの名前と1つの値を取得し、それらを1行で出力します。$KEYS

于 2012-09-10T15:31:36.480 に答える