嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-12-20 2192 次浏览 标签 : Mysql

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

我们的推送服务由我负责,一直运行都是OK,但是最近大家都说收不到push了,首先将push计划任务的执行结果追加写入一个文件(我们现在是一分钟执行一次)。然后再用tail -f push.log查看日志文件的更新情况。发现是有一个SQL查询总是失败。

实际的场景如下,每分钟要给所有用户推送5种消息,而在每次推送前都要去查询该用户是否设置不接受推送的设置。这样对于控制推送的表user_push_control的查询就颇为频繁。最开始我们没有总的开关,只有各个类型的开关,所以我写了一条SQL:

$sql = "select `uid` from `user_push_control` where `uid`=$uid and `push_type`=$pushType";

后来由于push的类型越来越多,就有了一个总开关,原来的push_type是从1开始的,这里就直接将插入一条push_type=0作为关闭所有推送。所以我看就直接在上面这条SQL的前面有做了一次类型的SQL查询:

$sql = "select uid from `user_push_control` where `uid`=$uid and `push_type`=0";

这个表总行数8000多行,很少。感觉应该不会出问题,但是就是在这里查询第一次没问题,查询第二次就必挂。合并为一次查询之后就OK了。更加深层次的原因还未明了,但是目前这样是解决了,给我的启示就是就算查询再简单,也不能太频繁。

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表