CI框架 守护进程nohup让PHP以常驻内存的形式执行订阅消息

项目中的需求:

  在自动更新从youtube获取的频道的时候,同时进行频道节目的自动更新功能。

  由于在其中涉及到很多的关于使用php的curl处理方案。

  数据量很大,我的解决思路我给出了四条解决方案:

  1.分步进行处理

  中间可能涉及到的知识点:redis的订阅发布功能,

  思路:第一步完成->发布给:第二步->第二步完成->第三部,依次类推。。。

  要让php的程序代码一直在内存中进行,只要第一步完成,就会触发php+redis的发布消息事件,

  由于写的接口的功能,一直常驻内存,那么有一个要求是,在第二次,第三次。。。处理的时候,内存的变化,只能是执行前的内存要大于或者等于执行后的内存

  不然,最后的结果是:php分配的内存被消耗完毕,最终导致php的内存溢出。

  使用CI框架处理这种情况,发现在进行批量插入和过滤去重的时候,内存的占用比较高【当然中间是经过一系列的排查的】

  查找关于ci的相关的文档:

  

很多程序员在使用codeigniter CLI下执行一个大批量数据导入的问题时,会一直出现内存过高的情况,下面对此分析器原因及解决办法。

CI db会将所有的查询sql和和sql执行时间保存下来,对于类似百万级大数据量的导入问题来说,其执行的sql记录都会被保存在内容中,这就占用了大量的内容直至脚本结束。

解决办法:
当你执行大数量的db操作时,记得设置:
复制代码 代码如下:
$this->db->save_queries = FALSE;

  至此,第一种思路就是如此的解决。

   至于其他的思路,由于对于前段后和后端的改动都比较大,这里就暂不做叙述了。

  

posted @ 2017-04-17 15:46  -起风了🪐  阅读(1269)  评论(0编辑  收藏  举报