2

このようなキーを持つ文字列型のキー値ストアをredisに持っています--

/url-pattern/url-slug-1
/url-pattern/url-slug-2
/url-pattern/url-slug-3
/url-pattern/url-slug-4 ... 

/url-pattern/のすべてのキーを、次のようなワイルド カード クエリを使用して取得できます--

keys /url-pattern/*

このワイルドカード/url-pattern/*に対応するすべてのキーの値を取得したいと思います

私はこれを試しました

    mget /url-pattern/*
1) (nil)

しかし、期待どおりに配列を返しませんでした。

/url-pattern/* に対応するすべてのキーの値を取得するにはどうすればよいですか

値の合計もしたいのですが、redisにはSUM()というものはないと思います

4

3 に答える 3

3

これは2015年の更新された回答です。

Redis を 2.8 より上にアップグレードできる場合は、MATCH を使用した SCAN コマンドが機能します。そのバージョンより前は、それほど多くなく、開発環境以外では KEYS コマンドを使用しないでください。

http://redis.io/commands/scan

コマンドラインの例:

$ redis-cli
127.0.0.1:6379> scan match V3.0:*
(error) ERR invalid cursor
127.0.0.1:6379> scan 0 match V3.0:*
1) "0"
2) 1) "V3.0:UNITTEST55660BC7E0C5B"
   2) "V3.0:shop.domain.com:route"
   3) "V3.0:UNITTEST55660BC4A2548"
127.0.0.1:6379> scan 0 match V1.0:*
1) "0"
2) (empty list or set)
127.0.0.1:6379> scan 0 match V3.0:*
1) "0"
2) 1) "V3.0:UNITTEST55660BC7E0C5B"
   2) "V3.0:shop.domain.com:route"
   3) "V3.0:UNITTEST55660BC4A2548"

PHP での例:

// Initialize our iterator to NULL
$iterate = null;

// retry when we get no keys back
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);

while ($arr_keys = $redis->scan($iterate, 'match:*')) {
    foreach ($arr_keys as $str_key) {
        echo "Here is a key: $str_key\n";
    }
    echo "No more keys to scan!\n";
}

phpコードはテストされておらず、たとえばここのコアドキュメントからのものであることに注意してください。ルックアップに必要なキーに応じて、製品コードを変更する必要があります。

Ubuntu を使用している場合、php5-redis をアップグレードする手順は次のとおりです。

  1. ここから 2.2.7 パッケージをダウンロードしてください: http://pecl.php.net/package/redis
  2. $ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.4
  3. README の指示に従って、phpize、configure、make install を行います
  4. コマンド ライン cli パッケージのシンボリック リンクを作成します。cd /etc/php5/cli/conf.d && sudo ln -s ../../mods-available/redis.ini 20-redis.ini
  5. $ php -i | grep Redis Redis Support => enabled Redis Version => 2.2.7
于 2015-05-27T19:10:29.490 に答える
3

MGET は、それぞれがキー名である複数の引数を受け入れます。キー名のパターンは行いません。

あなたができることは、最初に関連するすべてのキー名を取得し(KEYSを使用せず、代わりに SCAN を使用してください)、次に MGET でそれらの値を取得することです。

于 2014-09-01T11:47:28.847 に答える
0

ワイルドカード キーから値を返すことができる REDIS で使用できるコマンドはありません。

KEYSコマンドのドキュメントが表示される場合: http://redis.io/commands/keys、それは言う

KEYS は、細心の注意を払って本番環境でのみ使用する必要があるコマンドと考えてください。大規模なデータベースに対して実行すると、パフォーマンスが低下する可能性があります。このコマンドは、デバッグおよび特殊な操作を目的としています。通常のアプリケーション コードでは KEYS を使用しないでください。

あなたのビジネス ユース ケースはわかりませんが、この要件には別のデータ構造を使用する必要があるようです。list または set を使用して、同様の URL パターンを保存できます。

于 2014-09-01T11:30:43.933 に答える