Heim > Backend-Entwicklung > PHP7 > Hauptteil

Die Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren

藏色散人
Freigeben: 2023-02-17 12:04:02
nach vorne
3160 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich Reids Key Space Notification und TP5 zur Implementierung verteilter Verzögerungsaufgaben vorgestellt. Ich hoffe, dass er Freunden in Not hilfreich sein wird!

Die Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren

Testumgebung: Windows 10 + phpStudy

Konfigurieren Sie die Redis-Konfigurationsdatei redis.windows.conf

notify-keyspace-events "Ex"
Nach dem Login kopieren

Starten Sie den Redis-Dienst neu

Die Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren

Öffnen Sie erneut ein Konsolenfenster und führen Sie den Befehl aus

psubscribe __keyevent@0__:expired
Nach dem Login kopieren

Öffnen Sie ein neues Fenster und führen Sie das Terminal aus, nachdem der Abonnementvorgang blockiert wurde. Informationen werden später ausgegeben:

C:\Users\admin>redis-cli
127.0.0.1:6379> psubscribe __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1
Nach dem Login kopieren

Öffnen Sie ein anderes Terminal, redis-cli geben Sie redis ein, fügen Sie einen Schlüsselbenutzernamen hinzu, der in 6 Sekunden abläuft:
Die Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren

Die Befehlszeile ist abgeschlossen

2 . Mit Hilfe des TP5.1-Befehlszeilentools

Verwendung des Befehlszeilentools: https://www.kancloud.cn/manual/thinkphp5_1/354146

1 line pay

<?php
/**.-------------------------------------------------------------------------------------------------------------------
 * |  Github: https://github.com/Tinywan
 * &#39;------------------------------------------------------------------------------------------------------------------*/
 
namespace app\common\command;
 
use app\pay\service\RedisSubscribe;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
 
class Pay extends Command
{
    // 配置指令
    public function configure()
    {
        $this->setName(&#39;pay&#39;)
          ->addArgument(&#39;type&#39;, Argument::REQUIRED, "the type of the task that pay needs to run")
          ->setDescription(&#39;this is payment system command line tools&#39;);
    }
 
    // 执行指令
    public function execute(Input $input, Output $output)
    {
        $type = $input->getArgument(&#39;type&#39;);
        if ($type == &#39;psubscribe&#39;) {
            // 发布订阅任务
            $this->psubscribe();
        }
    }
 
    /**
     * Redis 发布订阅模式
     */
    private function psubscribe()
    {
        $service = new RedisSubscribe();
        $service->sub();
    }
}
Nach dem Login kopieren

2. Schreiben Sie das Skript RedisSubscribe.php

<?php
/**.-------------------------------------------------------------------------------------------------------------------
 * |  Github: https://github.com/Tinywan
 * &#39;------------------------------------------------------------------------------------------------------------------*/
 
namespace app\pay\service;
 
use redis\BaseRedis;
use think\facade\Log;
 
class RedisSubscribe
{
    public function sub()
    {
        Log::error(get_current_date().&#39;--过期事件的订阅-- &#39;);
        $redis = BaseRedis::location(); //这里是直接连接本地redis
        $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
        $redis->psubscribe(array(&#39;__keyevent@0__:expired&#39;), function ($redis, $pattern, $chan, $msg) {
            Log::error(&#39;[1]--过期事件的订阅 &#39; . $msg);
        });
    }
}
Nach dem Login kopieren

Erläuterung: Der zweite Parameter der psubscribe(patterns,patterns,callback)-Methode ist eine Callback-Funktion ein Rückruf.

Offizielle Erklärung: Anonyme Funktionen, auch Schließungen genannt, ermöglichen es Ihnen, vorübergehend eine Funktion ohne angegebenen Namen zu erstellen. Der am häufigsten als Callback-Funktionsargument verwendete Wert. Natürlich gibt es auch andere Anwendungen.

3. Führen Sie das Pay-Befehlstool im Stammverzeichnis des TP5-Projekts aus

php think pay psubscribe
Nach dem Login kopieren

4. Öffnen Sie ein neues Konsolenfenster-Terminal

C:\Users\admin>redis-cli
127.0.0.1:6379> setex UserName 10 Tinywan
OK
127.0.0.1:6379> get UserName
"Tinywan"
127.0.0.1:6379> get UserName
(nil)
127.0.0.1:6379>
Nach dem Login kopieren

5. Überprüfen Sie die Protokolldatei auf Überprüfen Sie, ob der abgelaufene Schlüssel empfangen wurde

Die Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren

6. Das Endergebnis ist wie folgt

Die Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren

Fortgeschrittener langsam erweitern

1. Die Bestellung automatisch stornieren

2. Nach Abschluss der Bestellung eine SMS senden

3. Verwandte Empfehlungen : "

PHP7-Tutorial

Das obige ist der detaillierte Inhalt vonDie Reids-Schlüsselraumbenachrichtigung von PHP7 arbeitet mit TP5 zusammen, um verteilte verzögerte Aufgaben zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage