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
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 !
Environnement de test : windows 10 + phpStudy
Configurer le fichier de configuration redis redis.windows.conf
notify-keyspace-events "Ex"
Redémarrer le redis service
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 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 * '------------------------------------------------------------------------------------------------------------------*/ 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. Écrivez le script 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); }); } }
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 ?
6. Le résultat final est le suivant
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!