Redis 的訂閱與釋出

PHP_LHF發表於2020-07-09

第一次寫寫文章,不好的地方請多多包涵

因為需要用redis的訂閱與釋出所以研究了一下,明白後發現其實挺簡單的,但是自己中間自己也走了很多的彎路,所以記錄一下。

第一步:使用 php artisan make:command RedisSubscribe 建立命令會在/app/Console/Commands/目錄下生成RedisSubscribe.php檔案

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Redis;

class RedisSubscribe extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'redis:subscribe';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        // 這段程式碼需要自己完善
        // 重新建立redis物件是為了避免當redis有釋出是不能有其他的操作
        $redis = Redis::connection('publisher');

        $redis->psubscribe(['test'], function ($message) {
            Redis::set('2', $message);
        });
    }
}

第二步:使用subscribe test 監控頻道test

redis的訂閱與釋出
注意:一定要在執行的環境上執行 php artisan redis:subscribe否則會看不到資訊輸出資訊的,因為本人就在上面走了彎路,程式碼執行的是homestead的環境上,但是在PHPstorm上執行的php artisan redis:subscribe後來發現自己特別的傻。

第三步

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
use Illuminate\Http\Request;


class MonitorNewController extends Controller
{
    public function handleRedis(Request $request)
    {
        // 這裡redis的連結也是為了避免當redis有釋出是不能有其他的操作
        $redis = Redis::connection('default');
        $redis->publish('test', $request->get('name'));
    }

}

在api中設定路由訪問handleRedis 方法就能看到上圖的中結果。好了到此就算完成了redis的釋出和訂閱。

下面介紹一下在homestead環境中使用後臺程式完成永久監控。

一種情況使用nohup監控,一種使用screen監控 不過這兩個都需要安裝一下

安裝nohup 命令 sudo apt-get install coreutils
安裝後使用命令 nohup php artisan redis:subscribe 注意 這個命令需要到專案的根目錄下去執行,否則會報打不開artisan檔案

另外一種情況是使用screen開啟程式

安裝命令 apt-get install screen
安裝完成後使用 screen -S [Process name] (你的程式名稱)注意 這個也是需要在專案的根目錄中執行,否則在screen中執行 php artisan redis:subscribe 命令也是無法開啟 artisan的錯誤。
screen 中執行 php artisan redis:subscribe 命令。到此redis的訂閱和釋出完成。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章