laravel简单实现redis队列

1 篇文章 0 订阅
1 篇文章 0 订阅

1.在laravel项目中安装依赖

composer require predis/predis

2.项目根目录创建Test消费者文件

php artisan make:job TestJob

  然后在 app\Jobs 目录下得到 TestJob.php 文件

  其中 handle() 方法在队列任务执行触发

3.添加任务到队列

   其他位置通过埋点触发

//点击量redis队列异步处理
TestJob::dispatch(['id' => 4])->onQueue('clickQueue'));

   此处我们在 dispatch 方法内放入了一个数组,该数组在任务执行时可得到并使用;onQueue 方法指定了一个队列名称

   回到TestJob.php文件

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Models\Books;

class BookClickQueue implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $data;
    /**
     * Create a new job instance.
     * @param $data
     * @return void
     */
    public function __construct($data = [])
    {
        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $data = $this->data;
        if(empty($data['id'])){
            echo "param error";
            return;
        }
        Books::where('id',$data['id'])->increment('click_num');
        echo "success";
    }
}

4.命令行开启队列监听 clickQueue 队列

php artisan queue:work --queue=clickQueue

   触发埋点命令行返回
   [2019-09-26 08:06:16] Processing: App\Jobs\clickQueue
    success[2019-09-26 08:06:16] Processed:  App\Jobs\clickQueue
   查看数据库click_num已更新。

5.延时任务

   在某些情况下我们需要延时执行一些任务,delay 方法可以很好的协助我们完成这个操作。

TestJob::dispatch(['id' => 4])->delay(now()->addMinutes(2))->onQueue('clickQueue'));

    2分钟后
    [2019-09-26 08:06:16] Processing: App\Jobs\clickQueue
    success[2019-09-26 08:06:16] Processed:  App\Jobs\clickQueue
    查看数据库click_num已更新。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值