关于我博客的大乐透模块,随机注数42170条数据匹配官方中奖的这件事
先说问题,之前是通过计划任务来实现,最新一期大乐透随机注数是否中奖
结果上周五我自己随机了4w多注来看看可不可以中一等奖
不出意外的出现意外了
因为是循环匹配导致了请求超时直接504了
因为这块太耗时了,所以今天我改成了队列形式然后加分块查询来处理这块,不知道还有没有什么好的办法
然后队列的最大重试次数是3次
超时时间设置的600秒
大乐透随机注数地址:www.xiaocai.ink/randLottery
这是对比的代码
这是队列处理逻辑
这是计划任务,把任务推送到队列中去
注数中奖处理完之后,会生成一条统计结果
这是开奖结果表
这是随机注数表数据
看标题还以为随机出来的号码中奖了 :unamused:
你这种最好是用 SSE 来返回数据,就是生成一个组合,返回一个组合给前端。
伪代码:
这样保持 Http 长连接,可以避免等待时间过长出现 504 的情况,参考「Chatgpt」的对话返回数据的方式。
超级大乐透我中过三等奖
你把事情做复杂了吧。 将每期号码,按大小排列,做成一个KEY。开奖号码,按大小排列。只查一次就行了。
队列做完没有推送,我才执行了 php artisan queue:work 但是还是没有弄完,还剩2w数据没有开奖,队列一共执行了两次,这是什么原因
其实可以分成两个job执行:
可以尽量避免了Job超时问题。
循环里更新数据库了吗?每次chunk的时候,把里面循环计算出来中奖level的id写一个数组里,循环完之后批量更新level试试嘞
思路展开,队列里还可以套队列,存入数据库的分组后,根据组每个一个队列,水平展开,超时也会少,不过条件和数据怎么去分就看你自己的思路了
有没有可能,做一个全的数据,然后随机取ID ?
:disappointed:我还以为有人中奖了
原来2.2亿是你随机出来的哈 抓到了