Redis 的订阅与发布
第一次写写文章,不好的地方请多多包涵
因为需要用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
注意:一定要在运行的环境上执行
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 协议》,转载必须注明作者和本文链接
推荐文章: