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

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

藏色散人
藏色散人nach vorne
2019-04-13 11:03:533154Durchsuche

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"

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

Ö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

Ö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();
    }
}

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);
        });
    }
}

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

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>

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!

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