この記事では分散遅延タスクを実装するためのReidsキースペース通知とTP5を中心に紹介しますので、困っている友人の参考になれば幸いです!
テスト環境: Windows 10 phpStudy
redis 構成ファイル redis.windows.conf
notify-keyspace-events "Ex"
redis サービスを再起動
##コンソール ウィンドウを再度開き、コマンド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 秒で期限切れになるキーのユーザー名を追加します:
<?php /**.------------------------------------------------------------------------------------------------------------------- * | Github: https://github.com/Tinywan * '------------------------------------------------------------------------------------------------------------------*/ 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('pay') ->addArgument('type', Argument::REQUIRED, "the type of the task that pay needs to run") ->setDescription('this is payment system command line tools'); } // 执行指令 public function execute(Input $input, Output $output) { $type = $input->getArgument('type'); if ($type == 'psubscribe') { // 发布订阅任务 $this->psubscribe(); } } /** * Redis 发布订阅模式 */ private function psubscribe() { $service = new RedisSubscribe(); $service->sub(); } }2. スクリプト RedisSubscribe.php
<?php /**.------------------------------------------------------------------------------------------------------------------- * | Github: https://github.com/Tinywan * '------------------------------------------------------------------------------------------------------------------*/ namespace app\pay\service; use redis\BaseRedis; use think\facade\Log; class RedisSubscribe { public function sub() { Log::error(get_current_date().'--过期事件的订阅-- '); $redis = BaseRedis::location(); //这里是直接连接本地redis $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1); $redis->psubscribe(array('__keyevent@0__:expired'), function ($redis, $pattern, $chan, $msg) { Log::error('[1]--过期事件的订阅 ' . $msg); }); } }を作成します 説明: psubscribe(patterns, pattern, callback) メソッドの 2 番目のパラメーターはコールバック関数です。クロージャをコールバックとして使用します。 公式説明: クロージャとも呼ばれる匿名関数を使用すると、名前を指定せずに関数を一時的に作成できます。コールバック関数の引数として最も一般的に使用される値。もちろん、他のアプリケーションもあります。 3. TP5 プロジェクトのルート ディレクトリにある有料コマンド ツールを実行します
php think pay psubscribe4. 新しいコンソール ウィンドウのターミナルを開きます
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. ログ ファイルを確認します。期限切れのキーを受信したかどうかを確認してください 6。最終結果は次のとおりです。 より高度でゆっくりとしたものです。 Expand
1. 注文を自動的にキャンセルする2. 注文完了後にテキスト メッセージを送信する3. タスクを遅らせるなど関連する推奨事項: 「
PHP7 チュートリアル》
以上がPHP7 の Reid キー空間通知は TP5 と連携して分散遅延タスクを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。