Loading... 这是一个请求数据并更新数据的实例,由于更新内容太大,一次性运行容易导致达到并发上限,所以使用队列处理 **1.**time.php 一个定时执行文件 ```php <?php namespace app\admin\controller; use app\common\controller\AdminController; use think\facade\Db; use think\cache\driver\Redis; use think\facade\Queue; class Time extends AdminController { public function index() { ignore_user_abort(); set_time_limit(0); $count = Db::name('analysis_patent_retrieval') ->count(); $page = bcdiv($count,'500')+1; for ($i = 0;$i<$page;$i=$i+1){ // 延迟时间(秒) $delay = 10; dump($i); $res = Queue::push("app\queue\AprQueue",['i'=>$i],'apr'); dump($res); } } } ``` **2.**AprQueue.php 队列处理逻辑,在app下创建一个queue的文件,把这个队列执行php放进去 ```php <?php namespace app\queue; use app\common\model\AnalysisPatentRetrieval; use app\common\model\CustomRelate; use app\common\model\Retrieve; use Elasticsearch\ClientBuilder; use think\facade\Db; use think\queue\Job; class AprQueue { public function fire(Job $job, $data){ $isDone = $this->doJob($data); if ($isDone) { // 任务执行成功 删除任务 $job->delete(); } else { if ($job->attempts() > 3) { // 任务重试3次后 删除任务 $job->delete(); } } } /** * 队列执行 业务处理 * @param $data * @return bool */ private function doJob($data) { echo 'start11'; $i = $data['i']; $data = Db::name('analysis_patent_retrieval') ->field('id,public_account') ->limit($i*500,500) ->select() ->toArray(); foreach ($data as $k => $v) { //post请求数据并更新,这里就不写详细内容了,你可以根据自己的情况来写 } echo 'end'; return true; } } ``` **3.**在config配置queue文件 ![image.png](https://www.qmsldg.com/usr/uploads/2023/09/910829855.png) ```php return [ 'default' => 'redis', 'connections' => [ 'sync' => [ 'type' => 'sync', ], 'database' => [ 'type' => 'database', 'queue' => 'default', 'table' => 'jobs', 'connection' => null, ], 'redis' => [ 'type' => 'redis', 'queue' => 'default', 'host' => '127.0.0.1', 'port' => 6379, 'password' => '11111111', 'select' => 6, 'timeout' => 0, 'persistent' => false, ], ], 'failed' => [ 'type' => 'none', 'table' => 'failed_jobs', ], ]; ``` **4.**在宝塔执行守护进程 ![image.png](https://www.qmsldg.com/usr/uploads/2023/09/1071203756.png) **5.**然后把time.php放到定时任务执行就可以了 ![image.png](https://www.qmsldg.com/usr/uploads/2023/09/2290113365.png) 最后修改:2023 年 09 月 26 日 © 允许规范转载 打赏 赞赏作者 赞 如果觉得我的文章对你有用,请随意赞赏