Heim  >  Artikel  >  Backend-Entwicklung  >  PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

藏色散人
藏色散人nach vorne
2020-01-22 14:54:073676Durchsuche

PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

Lösung für Bestell-Timeout und Aktivitätsablauf: PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

Redis 2.8 . Nach Version 0 verfügbar, können Keyspace-Nachrichten (Redis Keyspace Notifications) mit SUBSCRIBE nach Version 2.0.0 verwendet werden, um den Vorgang dieser geplanten Aufgabe abzuschließen.

1. Wir abonnieren zuerst den Kanal mit dem Namen redisChat 

PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

2. Jetzt öffnen wir erneut einen Redis-Client und redisChat dann im selben Kanal Veröffentlichen Sie eine Nachricht und Abonnenten können sie erhalten.

PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

Die empfangene Nachricht lautet wie folgt:

PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

3. Redis-Konfiguration des Schlüsselablaufereignisses

Hier müssen Sie den Parameter von notify-keyspace-events auf „Ex“ konfigurieren. x stellt ein Ablaufereignis dar. notify-keyspace-events “Ex” Starten Sie nach dem Speichern der Konfiguration den Redis-Dienst neu, damit die Konfiguration wirksam wird.

PHP Redis implementiert die Benachrichtigung über den Abonnementschlüsselbereich

Redis-Instanziierungsklasse:

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 für Ablaufereignisse:

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

Ablaufereignis festlegen:

index.php

require_once './Redis.class.php';
$redis = new \Redis2();
$order_id = 123;
$redis->setex('order_id',10,$order_id);

Zuerst im Befehlszeilenmodus ausführenpsubscribe.php 

Greifen Sie im Browser auf index.php

zu und der Effekt ist wie folgt:

PHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus

Für weitere verwandte PHP-Kenntnisse besuchen Sie bitte PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonPHP wartet auf Redis-Schlüsselfehler und löst Rückrufereignisse aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen