Inhaltsverzeichnis
Antwortinhalt:
Heim Backend-Entwicklung PHP-Tutorial Bitte geben Sie mir einige Ideen zur Implementierung der Aufgabenwarteschlange in PHP Redis

Bitte geben Sie mir einige Ideen zur Implementierung der Aufgabenwarteschlange in PHP Redis

Oct 19, 2016 am 10:40 AM
php redis 队列

Mein PHP-Website-Programm ruft die Schnittstelle einer externen Website auf.
Wenn der Benutzer Daten eingibt, empfängt das PHP-Programm die Daten, fordert dann basierend auf den Daten die Schnittstelle der externen Website an, ruft die Daten ab und gibt sie an den Benutzer zurück.
Wenn jedoch mehrere Benutzer gleichzeitig Daten übermitteln, fordert PHP diese Schnittstelle gleichzeitig an und diese Schnittstelle gibt einen Fehler zurück.

Ich möchte jetzt PHP Redis verwenden, um eine Warteschlange zu erstellen. Benutzeranfragen werden in die Redis-Warteschlange gestellt und nacheinander auf den externen Schnittstellen abgefragt, um das Problem zu vermeiden, dass gleichzeitig Schnittstellen angefordert werden.

Wie setzt man es konkret um?

Antwortinhalt:

Mein PHP-Website-Programm ruft die Schnittstelle einer externen Website auf.
Wenn der Benutzer Daten eingibt, empfängt das PHP-Programm die Daten, fordert dann basierend auf den Daten die Schnittstelle der externen Website an, ruft die Daten ab und gibt sie an den Benutzer zurück.
Wenn jedoch mehrere Benutzer gleichzeitig Daten übermitteln, fordert PHP diese Schnittstelle gleichzeitig an und diese Schnittstelle gibt einen Fehler zurück.

Ich möchte jetzt PHP Redis verwenden, um eine Warteschlange zu erstellen. Benutzeranfragen werden in die Redis-Warteschlange gestellt und nacheinander auf den externen Schnittstellen abgefragt, um das Problem zu vermeiden, dass gleichzeitig Schnittstellen angefordert werden.

Wie setzt man es konkret um?

Probieren Sie es aus

<code>// 创建请求ID标志, uniqid 无法保证唯一, 自己去搜索生成唯一的方法
$uuid = uniqid();
$tsk_name = "mytask";
$time_out = 30000; // 超时策略: 30秒
$time_start = time();
$redis-&gt;rPush($tsk_name, $uuid); // 右(后)插入队列

// 堵塞等待队列中第一个和$uuid匹配的(到我了)
while($uuid != $redis-&gt;lGet($tsk_name, 0)){
    if((time()-$time_start)&gt; $time_out) {
        break; // 超时跳出(某些原因队列异常了, 可能永远取不到)
    }
    usleep(10); // sleep 10ms, 再次尝试
}

// 这里执行任务的处理代码....

// $response 已拼装好要返回的内容
// 处理完成后(数据库等已入库更新), 需要:
if($redis-&gt;lGet($tsk_name, 0) == $uuid){ // 再次确认第一个是本请求
    $redis-&gt;lPop($tsk_name); // 完成任务了, 从队列中移除
}
 
// 响应内容
return $response;</code>
Nach dem Login kopieren

Der Handtyp wurde nicht überprüft, die Idee ist diese.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

See all articles