Maison  >  Article  >  développement back-end  >  PHP écoute les échecs de clé Redis et déclenche des événements de rappel

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

藏色散人
藏色散人avant
2020-01-22 14:54:073678parcourir

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);
    }
 
}

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,来实现自动撤单 
}

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);

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!

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