队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间
这个星期遇到一个汇总的微信模板消息的推送这样一个问题。
相信很多人都遇到过这个问题。
简单一点就是循环跑,但是循环跑会超时什么的,当然也可以解决超时的问题。
但是循环跑实在是有点蠢,而且是同步的,在php中,解决这类问题,队列的方式在合适不过了。
那么,就来说明一下队列的基本使用。
我用的是laravel的5.8版本,每个版本在配置上或多或少可能会有些出入,基本相差不大。
首先,查看需要使用的队列的存储方式,laravel提供了4种的样子,常用的就是redis和mysql了。
类型的优势和好处就不介绍了,自行查看文档即可。飞雷神
先找到laravel的队列配置 (config/queue.php)
//默认的配置项
'default' => env('QUEUE_CONNECTION', 'sync'),
/*
|--------------------------------------------------------------------------
| 默认队列驱动
|
*/
'connections' => [
'sync' => [
],
'database' => [
],
'beanstalkd' => [
],
'sqs' => [
],
'redis' => [
],
],
/*
|--------------------------------------------------------------------------
| 失败的队列任务
*/
'failed' => [
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
]
2.去env中配置属性,主要是 QUEUE_CONNECTION,某些版本里面是 QUEUE_DRIVER ,这个地方弄对,后面的也就没啥问题了。
3.队列任务的是创建
php artisan make:job 队列名
调用和启用的方式这里说明一下
调用===》 队列名::dispath(参数)
相信一般也都是在\App\Jobs下。
启用命令
php artisan queue:listen
如果需要linux后台常驻运行的话就执行
nohup php artisan queue:listen > /tmp/artisan.log 2>&1 &
查看后台是否常驻成功
jobs -l 或者 ps -aux | grep queue
如果遇到错误的情况一般可以查看日志 如 /tmp/artisan.log 这个上面设置的日志
如果你也用的是redis且正好队列里面的数据不对
那么 你可以 ↓
1.进入redis中(一般操作命令行比较好)
当使用的是yum安装的redis的时候 直接执行命令 redis-cli
如果是别的方式安装的,进入到指定的目录下执行该命令即可。
2.登入
执行命令-》 auth password
3.查找所有的key
执行命令-》 keys * (更多命令查看 飞雷神)
4.清除
执行命令-》flushall (这是清除所有,不建议使用,这是删除所有的 redis数据)
执行命令-》del key (根据指定的键值删除)
完。