Maison > développement back-end > PHP7 > 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

藏色散人
Libérer: 2023-02-17 12:04:02
avant
3200 Les gens l'ont consulté

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"
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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();
    }
}
Copier après la connexion

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);
        });
    }
}
Copier après la connexion

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
Copier après la connexion

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>
Copier après la connexion

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal