Heim >Datenbank >Redis >So verwenden Sie Scan zum Ersetzen von Schlüsseln in Redis

So verwenden Sie Scan zum Ersetzen von Schlüsseln in Redis

藏色散人
藏色散人nach vorne
2020-01-28 14:06:323822Durchsuche

So verwenden Sie Scan zum Ersetzen von Schlüsseln in Redis

Wir alle wissen, dass Sie bei der Suche nach Redis-Schlüsseln das Schlüsselmuster verwenden können, aber wenn zu viele Schlüssel vorhanden sind, ist die Effizienz des Schlüsselbefehls sehr gering, wenn er direkt online verwendet wird Es kann sogar zu einem Unfall kommen. Zu diesem Zeitpunkt können wir auch den Scan-Befehl verwenden. Der Befehl

SCAN ist ein Cursor-basierter Iterator (cursor based iterator): Bei jedem Aufruf des Befehls

SCAN wird dem Benutzer ein neuer Cursor zurückgegeben, den der Benutzer benötigt die nächste Iteration. Verwenden Sie diesen neuen Cursor als Cursorparameter des SCAN-Befehls, um die vorherige Iteration fortzusetzen.

Wenn der Cursor-Parameter des SCAN-Befehls auf 0 gesetzt ist, startet der Server eine neue Iteration, und wenn der Server einen Cursor mit dem Wert 0 an den Benutzer zurückgibt, zeigt dies an, dass die Iteration beendet ist .

Schlüssel generieren

<?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;

Schlüssel Nummer anzeigen

keys c*

So verwenden Sie Scan zum Ersetzen von Schlüsseln in Redis

Scan verwenden, um Schlüssel in Redis zu ersetzen

Scan-Traverse

<?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;

Scan verwenden, um Schlüssel in Redis zu ersetzen

So verwenden Sie Scan zum Ersetzen von Schlüsseln in Redis

Natürlich können Sie auch eine Schleife durchführen, ohne die beiden Parameter Redis::OPT_SCAN und Redis::SCAN_RETRY zu verwenden, um festzustellen, ob der Rückgabewert falsch ist, und die Durchquerung erfolgreich sein kann .

Weitere Redis-Kenntnisse finden Sie in der Spalte Redis-Datenbank-Tutorial.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Scan zum Ersetzen von Schlüsseln in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen