关于队列使用场景的困惑
发现好多教材或者文章喜欢使用队列,很多时候,我感觉可能直接触发一条 SQL
语句即可完成,为什么要使用队列呢?我队列驱动使用 database
做了一个测试,取出用户表中没有认证邮箱的用户,标记为邮箱已认证。
public function verified()
{
$users = User::where('email_verified','0')->get();
\DB::enableQueryLog();
foreach ($users as $user) {
\App\Jobs\EmailVerified::dispatch($user);
}
dump(\DB::getQueryLog());
return 'finish';
}
结果表明其实使用队列,其实是需要把队列需要处理的数据写入 jobs
表,才会返回 return 'finish'
。而这个过程其实是比较漫长的。为什么我们不直接操作数据库呢。当然,如果选择 redis
或者 beanstalkd
驱动确实会快,单本质是一样的
public function verified()
{
$users = User::where('email_verified','0')->get();
foreach ($users as $user) {
$user->update(['email_verified'=>1]);
}
return 'finish';
}
或者
public function verified()
{
User::where('email_verified','0')->update(['email_verified'=>1]);
}
个人理解队列的使用场景应该是那些处理时间比较长的时间的事情,一般来说是针对短信,邮件获取其他与第三方接口对接的应用比较实用。如果你的事件只是需要改动数据表中的某个字段值的话,则不如直接对数据库做修改比较方便,而不要实用队列。不知道理解的对不对
推荐文章: