3

phpredis を使用して KEYS を SCAN に置き換えています。

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;
while($arr_keys = $redis->scan($it, "mykey:*", 10000)) {
    foreach($arr_keys as $str_key) {
        echo "Here is a key: $str_key\n";
    }
}

redis のドキュメントによると、SCAN を使用して検索をページ分割し、KEYS を使用することの欠点を回避しています。
しかし、実際には、上記のコードを使用すると、単一のコードを使用するよりも 3 分の 1 のコストで$redis->keys()
済みます。

mykey:*私のデータベースには40万以上のキーがあり、4つのキーがあることに注意してください

4

2 に答える 2

5

運用環境での使用keysは、グローバル スペース キーの反復中にサーバー全体をブロックするため禁止されているため、使用するかしないかについてはここでは議論しませんkeys

一方、物事をスピードアップしたい場合は、Redis をさらに使用する必要があります。データにインデックスを付ける必要があります。

これらの 400K キーがセットまたはソートされたセット、さらにはハッシュに分類できないとは思えないため、400K キー データベースの特定のサブセットが必要な場合はscan、1K アイテムのセットに対して同等のコマンドを実行できます。 400Kの。

Redis は、データのインデックス作成に関するものです。そうでない場合は、単純なキー値ストアのように使用しています。

于 2016-08-11T10:36:38.773 に答える