Solution pour le délai d'expiration des commandes et l'expiration de l'activité : PHP écoute les échecs de clé Redis et déclenche des événements de rappel
Redis 2.8 . Disponibles après la version 0, les messages keyspace (Redis Keyspace Notifications) peuvent être utilisés avec SUBSCRIBE
après la version 2.0.0 pour terminer l'opération de cette tâche planifiée. L'unité de synchronisation est la seconde.
1. Nous nous abonnons d'abord à la chaîne nommée redisChat
2. Maintenant, nous rouvrons un client Redis, puis redisChat dans la même chaîne. Publiez un message et les abonnés pourront le recevoir.
Le message reçu est le suivant :
3. Configuration Redis de l'événement d'expiration de clé
Ici, vous devez configurer le paramètre de pour qu'il soit "Ex". x représente un événement d'expiration. notify-keyspace-events
Après avoir enregistré la configuration, redémarrez le service Redis pour que la configuration prenne effet. notify-keyspace-events “Ex”
PHP redis implémente la notification de l'espace de clé d'abonnement
Classe d'instanciation redis :redis.class.php
//遇到类别重复的报错,所有叫Redis2 class Redis2 { private $redis; public function __construct($host = '127.0.0.1', $port = 6379) { $this->redis = new Redis(); $this->redis->connect($host, $port); } public function setex($key, $time, $val) { return $this->redis->setex($key, $time, $val); } public function set($key, $val) { return $this->redis->set($key, $val); } public function get($key) { return $this->redis->get($key); } public function expire($key = null, $time = 0) { return $this->redis->expire($key, $time); } public function psubscribe($patterns = array(), $callback) { $this->redis->psubscribe($patterns, $callback); } public function setOption() { $this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1); } }
psubscribe.php
require_once './Redis.class.php'; $redis = new \Redis2(); // 解决Redis客户端订阅时候超时情况 $redis->setOption(); $redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback'); // 回调函数,这里写处理逻辑 function keyCallback($redis, $pattern, $chan, $msg) { echo "Pattern: $pattern\n"; echo "Channel: $chan\n"; echo "Payl oad: $msg\n\n"; //keyCallback为订阅事件后的回调函数,这里写业务处理逻辑, //比如前面提到的商品不支付自动撤单,这里就可以根据订单id,来实现自动撤单 }
index.php
require_once './Redis.class.php'; $redis = new \Redis2(); $order_id = 123; $redis->setex('order_id',10,$order_id);
psubscribe.php
index.php
tutoriel php!
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!