Maison  >  Article  >  développement back-end  >  La notification d'espace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

La notification d'espace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

藏色散人
藏色散人avant
2019-04-13 11:03:533158parcourir

Cet article présente principalement la notification d'espace clé Reids et TP5 pour implémenter des tâches de retard distribuées. J'espère que cela sera utile aux amis dans le besoin !

La notification despace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

Environnement de test : windows 10 + phpStudy

Configurer le fichier de configuration redis redis.windows.conf

notify-keyspace-events "Ex"

Redémarrer le redis service

La notification despace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

Rouvrez une fenêtre de console et exécutez la commande

psubscribe __keyevent@0__:expired

Ouvrez une nouvelle fenêtre et effectuez l'opération de blocage d'abonnement. Les informations seront affichées. plus tard. :

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

Ouvrez un autre terminal, redis-cli entrez redis, ajoutez un nom d'utilisateur clé qui expire dans 6 secondes :
La notification despace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

La ligne de commande est terminée

2. Avec l'aide des outils de ligne de commande TP5.1

Utilisation des outils de ligne de commande : https://www.kancloud.cn/manual/thinkphp5_1/354146

1. Créez une nouvelle ligne de commande 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. Écrivez le script 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);
        });
    }
}

Description : Le deuxième paramètre de la méthode psubscribe(patterns,patterns,callback) est une fonction de rappel. Ici, j'utilise une fermeture comme rappel.

Explication officielle : Les fonctions anonymes, également appelées fermetures, permettent de créer temporairement une fonction sans nom précisé. La valeur la plus couramment utilisée comme argument de fonction de rappel. Bien entendu, il existe également d’autres applications.

3. Exécutez l'outil de commande pay dans le répertoire racine du projet TP5

php think pay psubscribe

4. Ouvrez un nouveau terminal de fenêtre de console

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. le fichier journal. Avez-vous reçu une clé expirée ?

La notification despace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

6. Le résultat final est le suivant

La notification despace clé Reids de PHP7 coopère avec TP5 pour implémenter des tâches différées distribuées

Plus les étapes avancées seront prises lentement Extensions

1. Annuler automatiquement les commandes

2. Envoyer des messages texte une fois la commande terminée

3.

Recommandations associées : "

Tutoriel PHP7

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer