ホームページ  >  記事  >  バックエンド開発  >  PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

藏色散人
藏色散人転載
2019-04-13 11:03:533139ブラウズ

この記事では分散遅延タスクを実装するためのReidsキースペース通知とTP5を中心に紹介しますので、困っている友人の参考になれば幸いです!

PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

テスト環境: Windows 10 phpStudy

redis 構成ファイル redis.windows.conf

notify-keyspace-events "Ex"

redis サービスを再起動

PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

##コンソール ウィンドウを再度開き、コマンド

psubscribe __keyevent@0__:expired

新しいウィンドウを開き、サブスクリプション操作をブロックした後にターミナルを実行します。しばらくすると、情報が表示されます出力:

C:\Users\admin>redis-cli
127.0.0.1:6379> psubscribe __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "__keyevent@0__:expired"
3) (integer) 1

別のターミナルを開き、redis-cli で redis を入力し、6 秒で期限切れになるキーのユーザー名を追加します:


PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

コマンド ラインが完了しました

2. TP5 .1 コマンド ライン ツールを使用します。

コマンド ライン ツールの使用: https://www.kancloud.cn/manual/thinkphp5_1/354146

1.新しいコマンドライン pay

<?php
/**.-------------------------------------------------------------------------------------------------------------------
 * |  Github: https://github.com/Tinywan
 * &#39;------------------------------------------------------------------------------------------------------------------*/
 
namespace app\common\command;
 
use app\pay\service\RedisSubscribe;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
 
class Pay extends Command
{
    // 配置指令
    public function configure()
    {
        $this->setName(&#39;pay&#39;)
          ->addArgument(&#39;type&#39;, Argument::REQUIRED, "the type of the task that pay needs to run")
          ->setDescription(&#39;this is payment system command line tools&#39;);
    }
 
    // 执行指令
    public function execute(Input $input, Output $output)
    {
        $type = $input->getArgument(&#39;type&#39;);
        if ($type == &#39;psubscribe&#39;) {
            // 发布订阅任务
            $this->psubscribe();
        }
    }
 
    /**
     * Redis 发布订阅模式
     */
    private function psubscribe()
    {
        $service = new RedisSubscribe();
        $service->sub();
    }
}

2. スクリプト RedisSubscribe.php

<?php
/**.-------------------------------------------------------------------------------------------------------------------
 * |  Github: https://github.com/Tinywan
 * &#39;------------------------------------------------------------------------------------------------------------------*/
 
namespace app\pay\service;
 
use redis\BaseRedis;
use think\facade\Log;
 
class RedisSubscribe
{
    public function sub()
    {
        Log::error(get_current_date().&#39;--过期事件的订阅-- &#39;);
        $redis = BaseRedis::location(); //这里是直接连接本地redis
        $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
        $redis->psubscribe(array(&#39;__keyevent@0__:expired&#39;), function ($redis, $pattern, $chan, $msg) {
            Log::error(&#39;[1]--过期事件的订阅 &#39; . $msg);
        });
    }
}

を作成します 説明: psubscribe(patterns, pattern, callback) メソッドの 2 番目のパラメーターはコールバック関数です。クロージャをコールバックとして使用します。

公式説明: クロージャとも呼ばれる匿名関数を使用すると、名前を指定せずに関数を一時的に作成できます。コールバック関数の引数として最も一般的に使用される値。もちろん、他のアプリケーションもあります。

3. TP5 プロジェクトのルート ディレクトリにある有料コマンド ツールを実行します

php think pay psubscribe

4. 新しいコンソール ウィンドウのターミナルを開きます

C:\Users\admin>redis-cli
127.0.0.1:6379> setex UserName 10 Tinywan
OK
127.0.0.1:6379> get UserName
"Tinywan"
127.0.0.1:6379> get UserName
(nil)
127.0.0.1:6379>

5. ログ ファイルを確認します。期限切れのキーを受信したかどうかを確認してください

PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

6。最終結果は次のとおりです。

PHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装します

より高度でゆっくりとしたものです。 Expand

1. 注文を自動的にキャンセルする

2. 注文完了後にテキスト メッセージを送信する

3. タスクを遅らせるなど

関連する推奨事項: 「

PHP7 チュートリアル

以上がPHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。