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!
Testumgebung: Windows 10 + phpStudy
Konfigurieren Sie die Redis-Konfigurationsdatei redis.windows.conf
notify-keyspace-events "Ex"
Starten Sie den Redis-Dienst neu
Ö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 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 * '------------------------------------------------------------------------------------------------------------------*/ 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('pay') ->addArgument('type', Argument::REQUIRED, "the type of the task that pay needs to run") ->setDescription('this is payment system command line tools'); } // 执行指令 public function execute(Input $input, Output $output) { $type = $input->getArgument('type'); if ($type == 'psubscribe') { // 发布订阅任务 $this->psubscribe(); } } /** * Redis 发布订阅模式 */ private function psubscribe() { $service = new RedisSubscribe(); $service->sub(); } }
2. Schreiben Sie das Skript RedisSubscribe.php
<?php /**.------------------------------------------------------------------------------------------------------------------- * | Github: https://github.com/Tinywan * '------------------------------------------------------------------------------------------------------------------*/ namespace app\pay\service; use redis\BaseRedis; use think\facade\Log; class RedisSubscribe { public function sub() { Log::error(get_current_date().'--过期事件的订阅-- '); $redis = BaseRedis::location(); //这里是直接连接本地redis $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1); $redis->psubscribe(array('__keyevent@0__:expired'), function ($redis, $pattern, $chan, $msg) { Log::error('[1]--过期事件的订阅 ' . $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
6. Das Endergebnis ist wie folgt
Fortgeschrittener langsam erweitern
1. Die Bestellung automatisch stornieren
2. Nach Abschluss der Bestellung eine SMS senden
3. Verwandte Empfehlungen : "
PHP7-TutorialDas 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!