首先我不是属于基础扎实的那种,半路出家的那种所以第一次看文档弄的不清不楚,中间又是耽搁了心里有个坎想搞清楚,下面是是我搞清楚后得到的简单应用。
我这次写的主要是针对Redis的队列操作,因为如果还是用数据库感觉是多此一举,本来就是为了减轻数据库压力的,还用数据库就是脱了裤子放屁。
首先是安装Redis,对了说一下我这里是本地的,Linux上应该更简单,本地Redis的安装我就直接放一个链接,我用了还蛮靠谱的,
然后就是实际的来了,如果有用phpstrom的就好了,没有用的也可以直接cmd用命令行到项目根目录下去,要用 database
队列驱动,你需要数据表保存任务信息。要生成创建这些表的迁移,可以运行 Artisan 命令 queue:table
,迁移被创建之后,可以使用 migrate
命令生成这些表:
php artisan queue:table
php artisan migrate
执行完上面两条命令,费力打开 config\queue.php, key=default 的数组中使用env配置文件加载方式,laravel安装后默认为sync(同步),我们需要改为异步(你现在可以暂时认为同步!=队列),这里我们选择使用关系型数据库来实现队列,根目录下面有.evn的配置文件需要修改的配置如下
QUEUE_DRIVER=Redis //队列就可以发送Redis
REDIS_HOST=127.0.0.1 //连接的Redis所在服务器的ip,本次说的实在本地
REDIS_PASSWORD=12345 //redis的密码
REDIS_PORT=6379 //默认的端口
config\queue.php文件里面需要修改的如下
'default' => env('QUEUE_DRIVER', 'redis')
还有就是config\database.php需要修改的如下
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', '12345'),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
//虽然.evn里默认的已经写好了不过写上也咩影响啦
以上的事情做好以后前期的工作就算好了,后面就可以生成实际操作需要代码的部分了,为了生成队列任务,先运行命令会生成Jobs\SendReminderEmail.php文件
php artisan make:job SendReminderEmail
然后就是SendReminderEmail.php的编写:
class SendReminderEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $name;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($name)//外面发送给队列的参数
{
//
$this->name = $name;
}
/**
* Execute the job.
*
* @return void
*/
public function handle(){//就是加入条件完成后需要实现的过程
sleep(3);//为了怕数据库太频繁的操作延迟时间可以随意
DB::table('email')->insert([//这里需要在默认数据里创建一个‘email’的数据库
'name' => $this->name,
'img'=>1,
'sort'=>1
]);
}
}
还有就是其他的方法的调用实例
class IndexController extends Controller{
public function index(){
for ($i = 0; $i <= 100; $i++) {
dispatch(new SendReminderEmail("testEmail" . $i));
}
}
}
以上的完成后就可以运行下面命令行,因为是往Redis里发送所以后面加了Redis,如果还是mysql的话去掉后面的Redis就好了
php artisan queue:work redis
后面就可以去数据库查看数据是不是正常,还有Redis里面是不是有数据,然后里面具体调用还有需要发送什么数据也都有很多啦,靠大家发散思维,据我的想法这个队里的原理应该是定时任务,不晓得是不是,不是很清楚,我没去理解。不是什么难技术,只是自己当时没看完文档就开跑没搞成后来成功了,说一下,文笔也不好,大家不要介意,若是有帮助当然很好,没有也没关系,就当写个文档读后感了,以后在慢慢努力。