webman中数据库清空却仍然被定时任务访问到,不知道算不算一个bug

0

由于之前项目放了一些测试数据,process下Task.php执行定时任务,查询出满足要求的数据,并写入Redis队列,进行短信邮件等发送通知。


然后昨天数据已经清空了,按理说今天就不应该有消息了,但是今天还是发送了消息,并且消息中带有一些字段数据,说明这条记录确实是被查询出来了。


可能的情况是虽然清空了数据,但是定时任务依旧读取着之前游标之类记录的数据,请问有办法解决这个问题吗?


更新一下,感觉不是数据库的问题。


$re = Db::name('xxx')->insertGetId($data);
if($re){
redis_queue_send('task',$data);
}

因为是要先写入xxx表之后,再写入队列发送通知。但是查询xxx表里面,并没有写入过数据。所以正常来说,re是假,就不应该写入队列了。并且其他地方都没有入口写入这个队列,只有这一个地方。


所以说,要想写入队列,re必须为真,re如果为真,xxx表里面必定有数据才对。但是xxx表里面没有数据。。。懵逼了,求救


再补充一点,还有几个其他的不同的消息通知,也是类似的代码,有得队列名也叫“task”,然后在里面if判断执行不同代码,有的队列名是其他的。之前每天会收到4个通知。然后今天只有1条通知了。也就是说,昨天清空了数据库之后,有3条确实没有通知了,但是还是有1条在异常通知。现在就很懵,这条记录是如何一直存在且通知的。。。

已邀请:

changliaokf_com - changliaokf.com站长

赞同来自:

我觉得这应该算BUG了

six

赞同来自:

这种情况基本上是乌龙了,清空表不影响插入,插入成功自然可以如队列发邮件。
至于查询数据库没有插入的数据,有以下可能性。
1、你以为插入的是A服务器的数据库,实际是B服务器,俗称搞错服务器了。
2、你以为插入的是A数据库,实际上插入的是B数据库,搞错库了。
3、你以为插入的是A表,实际插入的是B表,搞错表了。
4、插入数据库后,表被定时脚本或者其他人清空了。


还有一种可能是,你的队列是延迟队列,比如是延迟到第二天发邮件。数据库清空了,但是队列里数据没清空,第二天还是可以发邮件。


还有可能其它地方入的队列,比如业务搞错队列,或者你清空的数据库没有关系的业务入的队列。比如就是其它业务也有task命名的队列,业务搞混了。

WilliamA

赞同来自:

你说了那么多,代码也没几行。你这代码不能完整地表达你的逻辑。

要回复问题请先登录注册