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

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

藏色散人
Freigeben: 2023-04-08 09:38:01
nach vorne
3733 Leute haben es durchsucht

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);
    }
 
}
Nach dem Login kopieren

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

Ablaufereignis festlegen:

index.php

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

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!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage