PHP écoute les échecs de clé Redis et déclenche des événements de rappel

藏色散人
Libérer: 2023-04-08 09:38:01
avant
3701 Les gens l'ont consulté

PHP écoute les échecs de clé Redis et déclenche des événements de rappel

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 

PHP écoute les échecs de clé Redis et déclenche des événements de rappel

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.

PHP écoute les échecs de clé Redis et déclenche des événements de rappel

Le message reçu est le suivant :

PHP écoute les échecs de clé Redis et déclenche des événements de rappel

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

Abonnement pour les événements d'expiration :

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,来实现自动撤单 
}
Copier après la connexion

Définir l'événement d'expiration :

index.php

require_once './Redis.class.php';
$redis = new \Redis2();
$order_id = 123;
$redis->setex('order_id',10,$order_id);
Copier après la connexion

Première exécution en mode ligne de commande

psubscribe.php 

Accédez à

index.php

dans le navigateur et l'effet est le suivant :

PHP écoute les échecs de clé Redis et déclenche des événements de rappel

Pour plus de connaissances sur php, veuillez visiter le

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!

É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