


Einführung in die Verwendung von Warteschlangen im Laravel-Framework (mit Code)
Dieser Artikel bietet Ihnen eine Einführung in die Verwendung von Warteschlangen im Laravel-Framework (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.
In der tatsächlichen Projektentwicklung stoßen wir häufig auf Situationen, in denen leichte Warteschlangen erforderlich sind, z. B. das Senden von Textnachrichten, das Senden von E-Mails usw. Diese Aufgaben reichen nicht aus, um schwere Nachrichtenwarteschlangen wie Kafka und RabbitMQ zu verwenden, aber Und es erfordert Funktionen wie Asynchronität, Wiederholung und Parallelitätskontrolle. Im Allgemeinen verwenden wir Redis, Beanstalk und Amazon SQS, um verwandte Funktionen zu implementieren. In diesem Artikel werden die am häufigsten verwendeten Redis-Warteschlangen vorgestellt.
Bevor wir den Warteschlangendienst von Laravel erklären, müssen wir zunächst über den auf Redis basierenden Warteschlangendienst sprechen. Erstens ist Redis für das Caching konzipiert, kann aber aufgrund einiger seiner eigenen Eigenschaften für Nachrichtenwarteschlangen verwendet werden
Redis-Warteschlangendatenstruktur
Verknüpfte Liste auflisten
Die Nachrichtenwarteschlangenfunktionen von Redis wie FIFO (First In, First Out) sind einfach zu implementieren. Sie benötigen lediglich ein Listenobjekt, um Daten vom Anfang abzurufen und Daten vom Ende zu stopfen.
Verwandte Befehle: (1) Links rein und rechts raus: lpush/rpop (2) Rechts rein und links raus: rpush/lpop.
Diese einfache Nachrichtenwarteschlange ist einfach zu implementieren.
Zset Ordered Set
Einige Aufgabenszenarien erfordern nicht, dass die Aufgabe sofort ausgeführt wird, aber einige Aufgaben sind sehr wichtig und müssen wiederholt werden, wenn die Aufgabe fehlschlägt. Diese Funktionen können nicht allein durch die Verwendung von Listen erreicht werden. Zu diesem Zeitpunkt ist eine geordnete Sammlung von Redis erforderlich.
Der geordnete Redis-Satz ähnelt dem Redis-Satz. Es handelt sich um eine Sammlung, die nicht dieselbe Zeichenfolge enthält. Der Unterschied zwischen ihnen besteht darin, dass jedem Mitglied der geordneten Menge eine Bewertung zugeordnet ist, anhand derer die Mitglieder der geordneten Menge von der niedrigsten zur höchsten Bewertung eingestuft werden.
Wenn man nur den geordneten Satz und die verzögerten Aufgaben betrachtet, gibt es keinen Zusammenhang, aber Sie können die Punktzahl des geordneten Satzes auf den Zeitpunkt festlegen, zu dem die verzögerte Aufgabe gestartet wird, und dann den geordneten Satz abfragen, um die abzurufen Abgelaufene Aufgaben kommen zur Verarbeitung heraus und erkennen so die Funktion, Aufgaben zu verzögern.
Bei wichtigen Aufgaben, die wiederholt werden müssen, wird die Aufgabe vor ihrer Ausführung in eine geordnete Sammlung aufgenommen und die längste Ausführungszeit der Aufgabe festgelegt. Wenn die Aufgabe erfolgreich ausgeführt wird, wird die Aufgabe aus der geordneten Sammlung gelöscht. Wenn die Aufgabe nicht innerhalb der angegebenen Zeit abgeschlossen wird, werden die Aufgaben im geordneten Satz wieder in die Warteschlange gestellt.
Verwandte Befehle:
(1) ZADD Fügt ein oder mehrere Mitglieder zu einem geordneten Satz hinzu oder aktualisiert seine Punktzahl, wenn er bereits vorhanden ist.
(2) ZRANGEBYSCORE Gibt einen geordneten Satz von Mitgliedsbereichen nach Punktzahl zurück.
(3) ZREMRANGEBYRANK Entfernt alle Mitglieder aus einer geordneten Menge innerhalb des angegebenen Index.
Aufgabenplanung des Laravel-Warteschlangendienstes
Der Aufgabenplanungsprozess des Warteschlangendienstes ist wie folgt:
Laravels Warteschlangendienst besteht aus zwei Es gibt zwei Prozesssteuerungen, eine ist der Produzent und die andere ist der Verbraucher. Diese beiden Prozesse manipulieren drei Redis-Warteschlangen, von denen eine List für unmittelbare Aufgaben und zwei Zsets für verzögerte und ausstehende Aufgaben zuständig ist.
Der Produzent ist dafür verantwortlich, Aufgaben an Redis zu senden. Wenn es sich um eine sofortige Aufgabe handelt, wird sie standardmäßig in die Warteschlange gestellt. Wenn es sich um eine verzögerte Aufgabe handelt, wird sie in die Warteschlange gestellt: Standard. verzögert.
Der Verbraucher fragt zwei Warteschlangen ab, entnimmt kontinuierlich Aufgaben aus der Warteschlange, stellt die Aufgaben zunächst in queue:default:reserved ein und führt dann verwandte Aufgaben aus. Wenn die Aufgabe erfolgreich ausgeführt wird, wird die Aufgabe in queue:default:reserved gelöscht, andernfalls wird sie wieder in die Warteschlange queue:default:delayed gestellt.
Der Gesamtprozess des Laravel-Warteschlangendienstes
Aufgabenverteilungsprozess:
Aufgabenprozessorbetrieb:
Aufgabe erstellen
Warteschlangeneinstellungen
'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'retry_after' => 90, ],
In config/queue.php konfigurieren
Im Allgemeinen ist die Standard-Redis-Konfiguration Wie oben, Verbindung ist der Verbindungsname von Redis in der Datenbank. Beachten Sie, dass Sie bei Verwendung eines Redis-Clusters das Schlüssel-Hash-Tag verwenden müssen Läuft über retry_after hinaus. Nach dieser Zeit wird die Aufgabe wieder in die Warteschlange gestellt.
Erstellung der Aufgabenklasse
Die Struktur der Aufgabenklasse ist sehr einfach, sie enthält im Allgemeinen nur eine Handle-Methode, die die Warteschlange zum Aufrufen dieser Aufgabe verwendet.
Wenn Sie möchten, dass Aufgaben in die Warteschlange verschoben und nicht synchron ausgeführt werden, müssen Sie die IlluminateContractsQueueShouldQueue-Schnittstelle implementieren.
Wenn Sie Aufgaben an eine bestimmte Verbindung senden möchten, z. B. Redis oder Sqs, müssen Sie die Verbindungsvariable festlegen.
Wenn Sie die Aufgabe in eine bestimmte Warteschlange verschieben möchten, können Sie die Warteschlangenvariable festlegen.
如果想要让任务延迟推送,那么需要设置 delay 变量。
如果想要设置任务至多重试的次数,可以使用 tries 变量;
如果想要设置任务可以运行的最大秒数,那么可以使用 timeout 参数。
如果想要手动访问队列,可以使用 trait : IlluminateQueueInteractsWithQueue。
任务的分发
分发服务
写好任务类后,就能通过 dispatch 辅助函数来分发它了。唯一需要传递给 dispatch 的参数是这个任务类的实例:
class PodcastController extends Controller { public function store(Request $request) { // 创建播客... ProcessPodcast::dispatch($podcast); } }
如果想延迟执行一个队列中的任务,可以用任务实例的 delay 方法。
ProcessPodcast::dispatch($podcast) ->delay(Carbon::now()->addMinutes(10));
通过推送任务到不同的队列,可以给队列任务分类,甚至可以控制给不同的队列分配多少任务。要指定队列的话,就调用任务实例的 onQueue 方法:
ProcessPodcast::dispatch($podcast)->onQueue('processing');
如果使用了多个队列连接,可以将任务推到指定连接。要指定连接的话,可以在分发任务的时候使用 onConnection 方法:
ProcessPodcast::dispatch($podcast)->onConnection('redis ');
Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung von Warteschlangen im Laravel-Framework (mit Code). 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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

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 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.

Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

PHP stirbt nicht, sondern sich ständig anpasst und weiterentwickelt. 1) PHP hat seit 1994 mehreren Versionen für die Version unterzogen, um sich an neue Technologietrends anzupassen. 2) Es wird derzeit in E-Commerce, Content-Management-Systemen und anderen Bereichen häufig verwendet. 3) PHP8 führt den JIT -Compiler und andere Funktionen ein, um die Leistung und Modernisierung zu verbessern. 4) Verwenden Sie Opcache und befolgen Sie die PSR-12-Standards, um die Leistung und die Codequalität zu optimieren.

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

Um alle Schlüssel in Redis anzuzeigen, gibt es drei Möglichkeiten: Verwenden Sie den Befehl keys, um alle Schlüssel zurückzugeben, die dem angegebenen Muster übereinstimmen. Verwenden Sie den Befehl scan, um über die Schlüssel zu iterieren und eine Reihe von Schlüssel zurückzugeben. Verwenden Sie den Befehl Info, um die Gesamtzahl der Schlüssel zu erhalten.

Zu den Schritten zum Starten eines Redis -Servers gehören: Installieren von Redis gemäß dem Betriebssystem. Starten Sie den Redis-Dienst über Redis-Server (Linux/macOS) oder redis-server.exe (Windows). Verwenden Sie den Befehl redis-cli ping (linux/macOS) oder redis-cli.exe ping (Windows), um den Dienststatus zu überprüfen. Verwenden Sie einen Redis-Client wie Redis-Cli, Python oder Node.js, um auf den Server zuzugreifen.
