ホームページ  >  記事  >  データベース  >  Redis でスキャンを使用してキーを置き換える方法

Redis でスキャンを使用してキーを置き換える方法

藏色散人
藏色散人転載
2020-01-28 14:06:323761ブラウズ

Redis でスキャンを使用してキーを置き換える方法

Redis キーを検索するときに、keys パターンを使用できることは誰もが知っていますが、キーが多すぎると、keys コマンドの効率が非常に低くなります。直接使用すると、オンラインでは、本番が発生する可能性もあります。事故が発生した場合は、scan コマンドを使用した方がよいでしょう。

SCAN コマンドはカーソル ベースの反復子 (カーソル ベースの反復子 ) です:

SCAN コマンドが呼び出されるたびに、新しいカーソルがユーザーに返されます。前の反復プロセスを継続するには、ユーザーは次の反復でこの新しいカーソルを SCAN コマンドのカーソル パラメーターとして使用する必要があります。

SCAN コマンドのカーソル パラメーターが 0 に設定されている場合、サーバーは新しい反復を開始し、サーバーが値 0 のカーソルをユーザーに返すと、反復が終了したことを示します。 。

#キーの生成

<?php
// 生成1000个
$redis = new \Redis();
$redis->connect(&#39;127.0.0.1&#39;, 6379, 10);
$redis->select(2);
$arr = [
    &#39;rwer&#39;,
    &#39;24erw&#39;,
    &#39;rterq4&#39;,
    &#39;sdgfd5&#39;,
    &#39;dgsdg&#39;,
    &#39;sfst&#39;,
];
for ($i=0; $i<1000; $i++) {
    $redis->set(md5($i.$arr[$i%6]), md5($arr[$i%6].&#39;sdfsd&#39;));
}
echo "OK".PHP_EOL;

keys 番号の表示

keys c*

Redis でスキャンを使用してキーを置き換える方法

#Redis でスキャンを使用してキーを置き換える

スキャン トラバース

<?php
$redis = new \Redis();
$redis->connect(&#39;127.0.0.1&#39;, 6379, 10);
$redis->select(2);
$iterator = null;
// 遍历前缀
$pattern = &#39;c*&#39;;
$count = 100;
// 务必设置,如果没扫描到,继续扫描,而不是返回空,否则while直接退出,遍历就会不准确
$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
$total = [];
$i = 0;
// $count可以不设置,非必需参数
while($arr = $redis->scan($iterator, $pattern, $count)) {
    $arrVal = $redis->mget($arr);
    $ret = array_combine($arr, $arrVal);
    $total = array_merge($total, $ret);
    $i++;
}
// var_dump($total);
var_dump($i);
echo count($total).PHP_EOL;

Redis で使用するscan replace key

Redis でスキャンを使用してキーを置き換える方法もちろん、

\Redis::OPT_SCAN

\Redis::SCAN_RETRY ## を使用することもできません。 # これら 2 つのパラメータは、それ自体でループして戻り値が false かどうかを判断し、トラバーサルも成功する可能性があります。 redis についてさらに詳しく知りたい場合は、redis データベース チュートリアル

列に注目してください。

以上がRedis でスキャンを使用してキーを置き換える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。