And*_*gan 5 php distributed redis laravel
我的应用程序在负载均衡器后面的3台服务器上运行.因此它是无状态的,所有数据都存储在redis和MySQL中.
如果我的机器正在运行工匠cron调度程序,我假设相同的任务将运行3次.一旦在每台机器上,因为不知道它们之间共享的是什么,也就是数据库表.
有什么解决方案?
编辑:在Laravel的最新版本中,这是现在内置的.
Run Code Online (Sandbox Code Playgroud)$schedule->command('foo:bar')->onOneServer();
我们在Artisan命令中执行此操作,该命令应仅在每个cron执行的一个服务器上运行:
public function handle()
if(!Cache::add(get_class($this), true, 0.5)) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
Cache::add 是同步的,如果密钥已经存在,则返回false,因此即使所有三个服务器都以完全相同的微秒执行,只有一个服务器将继续执行其余任务.
另一个常见选项是在集群中的单个服务器上启用cron,或者为cron本身设置专用服务器.
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |