2016-08-11 20 views
1

phpsredisを使用してKEYSをSCANに置き換えます。phpredisでの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 documentationによると、私はキーを使用しての欠点を回避するために、検索をページ付けするためにSCANを使用しています。
実際には、上記のコードを使用すると、単なる単価に比べて3倍のコストがかかります$redis->keys()
私は何か間違っているのだろうか、またはKEYSの脅威を避けるためにスピードを払わなければならないのでしょうか?グローバルスペースキーを反復しながら、そのブロック全体のサーバは、その後、何の議論もありませんので、私は完全に私のデシベルに400K +キーを持つ

注意し、本番環境でkeysを使用して以来4つのmykey:*キー

答えて

3

だけで禁じられていますここでは使用するかどうかについてはkeysを使用してください。

一方、スピードアップしたい場合は、Redisをさらに進める必要があります。データのインデックスを作成する必要があります。

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

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

+0

確かに、データベースは私のものではなく、私もレディスには新しく、あなたの答えは私にヒントを与えてくれます。私の目標を達成するためには、もっと深く掘り下げていく必要があります。 多くの感謝 –

+0

@LoiDangええ、そう簡単ではありません。ところで、レディスの間違いは払うことができます。 Redisを効率的に使用できるようにするには、実際には適切なデータベースが必要です –

関連する問題