$this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
So löschen Sie Schlüssel stapelweise in PHP Redis
So löschen Sie Schlüssel stapelweise in PHP Redis: Öffnen Sie zuerst das Befehlsfenster. Verwenden Sie dann den Befehl „redis-cli keys video* | xargs redis-cli del“, um Schlüssel stapelweise zu löschen.
redis implementiert die Funktion zum Löschen von Schlüsseln in Stapeln Wir haben kein Redis, das Batch-Löschbefehle bereitstellt, aber wir können Key-Traversal-Keys verwenden, um
//批量删除以video开头的key redis-cli keys video* | xargs redis-cli del //以j,r开头,紧跟edis字符串的所有键 redis-cli keys [j,r]edis | xargs redis-cli del
注意: redis是单线程架构,如果redis包含了大量的键,执行keys命令可能会造成redis阻塞,所以一般建议不要在生产环境下使用keys命令。 如果非要遍历键删除的话,可以在一下三种情况使用: (1)在一个不对外提供服务的Redis从节点上执行,这样不会阻塞到客户端的请求,但是会影响到主从复制。 (2)如果确认键值总数确实比较少,可以执行该命令。 (3)使用scan命令渐进式的遍历所有键,可以有效防止阻塞。
Hinweis:
Progressive Durchquerung kann das Blockierungsproblem, das der Tastenbefehl verursachen kann, effektiv lösen, aber der Scan ist nicht perfekt. Wenn sich während des Scanvorgangs Änderungen an den Schlüsseln ergeben (hinzugefügt, gelöscht, geändert),dann der Durchquerungseffekt Es können folgende Probleme auftreten: Neu hinzugefügte Schlüssel werden möglicherweise nicht durchlaufen, doppelte Schlüssel werden möglicherweise nicht durchlaufen usw. Mit anderen Worten: Der Scan kann nicht garantieren, dass alle Schlüssel vollständig durchlaufen werden. Dies sind Dinge, die wir bei der Entwicklung berücksichtigen müssen.
<?php
namespace Redis;
use Redis;
class RedisTest
{
const PORT = 6379;
/**
* redis对象
*/
public $redis = null;
public function __construct()
{
$this->redis = new Redis();
$this->redis->connect('127.0.0.1', self::PORT);
}
public function info()
{
print_r($this->redis->info());
}
/**
* 删除前缀是test:的key
*/
public function keyDelete()
{
$pre = 'test:';
for ($i = 0; $i < 10; $i++) {
$this->redis->set($pre . "$i", "$i");
}
// Have scan retry
$this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;
while ($arr_keys = $this->redis->scan($it, "$pre*", 5)) {
call_user_func_array([$this->redis, 'del'], $arr_keys);
echo var_export($arr_keys, true) . PHP_EOL;
}
}
}
Nach dem Login kopieren
Ergebnisse zurückgeben<?php namespace Redis; use Redis; class RedisTest { const PORT = 6379; /** * redis对象 */ public $redis = null; public function __construct() { $this->redis = new Redis(); $this->redis->connect('127.0.0.1', self::PORT); } public function info() { print_r($this->redis->info()); } /** * 删除前缀是test:的key */ public function keyDelete() { $pre = 'test:'; for ($i = 0; $i < 10; $i++) { $this->redis->set($pre . "$i", "$i"); } // Have scan retry $this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $it = NULL; while ($arr_keys = $this->redis->scan($it, "$pre*", 5)) { call_user_func_array([$this->redis, 'del'], $arr_keys); echo var_export($arr_keys, true) . PHP_EOL; } } }
array ( 0 => 'test:8', ) array ( 0 => 'test:1', ) array ( 0 => 'test:9', ) array ( 0 => 'test:6', ) array ( 0 => 'test:5', ) array ( 0 => 'test:0', ) array ( 0 => 'test:3', ) array ( 0 => 'test:7', ) array ( 0 => 'test:4', ) array ( 0 => 'test:2', )
Um das Problem zu vermeiden, dass arr_keys ein leeres Array zurückgibt, können wir es wie folgt lösen: Lösung 1// Have scan retry $this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $it = NULL; while ($arr_keys = $this->redis->scan($it, "$pre*", 5)) { call_user_func_array([$this->redis, 'del'], $arr_keys); echo var_export($arr_keys, true) . PHP_EOL; }Nach dem Login kopierenLaut Dokumentation des Scans: Der Scan-Befehl kann bei jeder Iteration null zurückgeben, aber das ist kein Zeichen des Endes , endet es, wenn der Wert der zurückgegebenen Iteration „0“ ist.
Wenn also der obige Code iteriert und kein arr_keys zurückgegeben wird, ist $arr_keys ein leeres Array, sodass die while-Schleife natürlich unterbrochen wird und keine Ausgabe erfolgt.
$this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
Nach dem Login kopieren
Teilen Sie der Redis-Erweiterung mit, dass die Funktion nach der Ausführung des Scan-Befehls leer ist, wenn die zurückgegebene Ergebnismenge leer ist kehrt nicht zurück, sondern führt den Scan-Befehl direkt aus. Auf diese Weise gibt die Scan-Funktion bei der Rückkehr entweder false zurück, was bedeutet, dass die Iteration endet. $this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
Hinweis: SSCAN, HSCAN und ZSCAN haben die gleiche Logik
Lösung 2 //方式一
// Have scan retry
$this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;
while ($arr_keys = $this->redis->scan($it, "$pre*", 5)) {
call_user_func_array([$this->redis, 'del'], $arr_keys);
echo var_export($arr_keys, true) . PHP_EOL;
}
//方式二
while (true) {
$arr_keys = $this->redis->scan($it, "$pre*");
if ($arr_keys === false) {//迭代结束,未找到匹配pattern的key
return;
}
call_user_func_array([$this->redis, 'del'], $arr_keys);
echo var_export($arr_keys, true) . PHP_EOL;
}
Nach dem Login kopieren
//方式一 // Have scan retry $this->redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $it = NULL; while ($arr_keys = $this->redis->scan($it, "$pre*", 5)) { call_user_func_array([$this->redis, 'del'], $arr_keys); echo var_export($arr_keys, true) . PHP_EOL; } //方式二 while (true) { $arr_keys = $this->redis->scan($it, "$pre*"); if ($arr_keys === false) {//迭代结束,未找到匹配pattern的key return; } call_user_func_array([$this->redis, 'del'], $arr_keys); echo var_export($arr_keys, true) . PHP_EOL; }
Das obige ist der detaillierte Inhalt vonSo löschen Sie Schlüssel stapelweise in PHP Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Zukunft von PHP wird erreicht, indem sich an neue Technologietrends angepasst und innovative Funktionen eingeführt werden: 1) Anpassung an Cloud Computing, Containerisierung und Microservice -Architekturen, Unterstützung von Docker und Kubernetes; 2) Einführung von JIT -Compilern und Aufzählungsarten zur Verbesserung der Leistung und der Datenverarbeitungseffizienz; 3) die Leistung kontinuierlich optimieren und Best Practices fördern.

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

PHP und Python haben jeweils ihre eigenen Vorteile, und die Wahl sollte auf Projektanforderungen beruhen. 1.PHP eignet sich für die Webentwicklung mit einfacher Syntax und hoher Ausführungseffizienz. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit präziser Syntax und reichhaltigen Bibliotheken.

PHP bleibt in der modernen Webentwicklung wichtig, insbesondere in Content-Management- und E-Commerce-Plattformen. 1) PHP hat ein reichhaltiges Ökosystem und eine starke Rahmenunterstützung wie Laravel und Symfony. 2) Die Leistungsoptimierung kann durch OPCACHE und NGINX erreicht werden. 3) Php8.0 führt den JIT -Compiler ein, um die Leistung zu verbessern. 4) Cloud-native Anwendungen werden über Docker und Kubernetes bereitgestellt, um die Flexibilität und Skalierbarkeit zu verbessern.

PHP ist eine Skriptsprache, die auf der Serverseite weit verbreitet ist und insbesondere für die Webentwicklung geeignet ist. 1.PHP kann HTML einbetten, HTTP -Anforderungen und Antworten verarbeiten und eine Vielzahl von Datenbanken unterstützt. 2.PHP wird verwendet, um dynamische Webinhalte, Prozessformdaten, Zugriffsdatenbanken usw. mit starker Community -Unterstützung und Open -Source -Ressourcen zu generieren. 3. PHP ist eine interpretierte Sprache, und der Ausführungsprozess umfasst lexikalische Analyse, grammatikalische Analyse, Zusammenstellung und Ausführung. 4.PHP kann mit MySQL für erweiterte Anwendungen wie Benutzerregistrierungssysteme kombiniert werden. 5. Beim Debuggen von PHP können Sie Funktionen wie error_reporting () und var_dump () verwenden. 6. Optimieren Sie den PHP-Code, um Caching-Mechanismen zu verwenden, Datenbankabfragen zu optimieren und integrierte Funktionen zu verwenden. 7

Die Gründe, warum PHP für viele Websites der bevorzugte Technologie -Stack ist, umfassen die Benutzerfreundlichkeit, die starke Unterstützung der Community und die weit verbreitete Verwendung. 1) Einfach zu erlernen und zu bedienen, geeignet für Anfänger. 2) eine riesige Entwicklergemeinschaft und eine reichhaltige Ressourcen haben. 3) in WordPress, Drupal und anderen Plattformen häufig verwendet. 4) Integrieren Sie eng in Webserver, um die Entwicklung der Entwicklung zu vereinfachen.

PHP ist immer noch dynamisch und nimmt immer noch eine wichtige Position im Bereich der modernen Programmierung ein. 1) Einfachheit und leistungsstarke Unterstützung von PHP machen es in der Webentwicklung weit verbreitet. 2) Seine Flexibilität und Stabilität machen es ausstehend bei der Behandlung von Webformularen, Datenbankoperationen und Dateiverarbeitung; 3) PHP entwickelt sich ständig weiter und optimiert, geeignet für Anfänger und erfahrene Entwickler.

PHP und Python haben jeweils ihre eigenen Vorteile und eignen sich für verschiedene Szenarien. 1.PHP ist für die Webentwicklung geeignet und bietet integrierte Webserver und reichhaltige Funktionsbibliotheken. 2. Python eignet sich für Datenwissenschaft und maschinelles Lernen mit prägnanter Syntax und einer leistungsstarken Standardbibliothek. Bei der Auswahl sollte anhand der Projektanforderungen festgelegt werden.
