PHP多进程开发与Redis结合实践「建议收藏」

PHP多进程开发与Redis结合实践

大家好,又见面了,我是全栈君。

原文:https://blog.51cto.com/laok8/2107892?source=drh

业务逻辑介绍:

  1. 用户在 APP 上发帖子,然后存储到 Redis 的 List 列表中
  2. 利用 Linux 的 crontab 定时任务功能,按秒请求执行PHP脚本文件(processNewsRedisList.php)
  3. 调用 redis_process 处理API,进行存储到 Mysql 中

 

1.发帖子API

 

public function post_json() { $image = $_FILES['image']; $data = I(); $images = $this->post_upload($image); $data['image'] = $images ? $images : ''; if( count($data) ){ $redis = new Redis(); $data['creation_time'] = time(); //把发过来的帖子存储redis $result = $redis->lpush('news_list', json_encode($data)); // $redis->lpush('news_list', json_encode($data)); // while (TRUE){ // if ($redis->lsize('news_list') > 0){ // $info = $redis->rpop('news_list'); // $info = json_decode($info, true); // $result = $this->_model->news_publish( $info ); // }else { // sleep(1);break; // } // } // $redis->close(); $data['creation_time'] = time(); // $result = $this->_model->news_publish( $data ); if( $result < 1 ){ 
                                //redis方式 // if( !$result ){//model方式 $this->_data['data'] = ''; $this->_data['error'] = true; $this->_data['message'] = L('_DATABASE_ERROR_'); }else{ 
                                            //success $this->_data['data'] = $result; $this->_data['error'] = false; } } else{ $this->_data['data'] = ''; $this->_data['error'] = true; $this->_data['message'] = L('_Invalid_Parameters_'); } $this->response($this->_data); }

 
 

2.processNewsRedisList.php

<?php /** *检查队列中帖子,并把帖子插入数据库表中 */ function worker() { //再次克隆出子进程 $pid = pcntl_fork(); if ( $pid == -1 ) { exit('fork error'); } if ( $pid == 0 ) { $redis = new Redis(); $redis->connect('127.0.0.1', 7200); //业务逻辑代码 while(true) { 
                       //sleep(5); if( $redis->lsize('news_list') > 0 ){ $info = $redis->rpop('news_list'); $info = json_decode($info, TRUE); //使用curl调用API接口 $uri = "http://*.*.*.*:*/api.zmartec/News/redis_process"; $data = $info; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $uri); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_exec($ch); curl_close($ch); } else { sleep(1);//队列中没有任务的时候,睡眠1s,让出cpu给其它进程 } } $redis->close(); } } /** *子进程,负责设置子进程为领导小组 * *并调用处理函数,处理任务 */ function children() { $sid = posix_setsid(); echo $sid; for( $i = 0; $i < 2; $i++ ) { worker(); } } //克隆子进程,返回子进程的进程id $pid = pcntl_fork(); if ( $pid == -1 ) { exit('fork error'); } if ( $pid == 0 ) { children(); }else{ exit('parent exit'); } ?>

 
 

3.存储帖子到 Mysql

thinkphp 3.2框架: public function redis_process() { $data = $_POST; if ($this->_model->news_publish($data)) { return true; } esle { return false; } } public function news_publish( $data ) { try{ return M('news')->add($data); }catch(Exception $ex){ return FALSE; } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112225.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月8日 下午8:00
下一篇 2022年2月8日 下午8:00


相关推荐

  • 遍历Arraylist的几种方法

    遍历Arraylist的几种方法importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Iterator;importjava.util.List;importjava.util.ListIterator;publicclassErgodic{publicstaticvoidmain(String[]args){ System.out.println(“ArrayList集合的遍历”); Listlist=new

    2022年7月22日
    9
  • MMC 卡驱动分析[通俗易懂]

    MMC 卡驱动分析[通俗易懂]最近花时间研究了一下MMC卡驱动程序,开始在网上找了很多关于MMC卡驱动的分析文章,但大都是在描述各个层,这对于初学者来讲帮助并不大,所以我就打算把自己的理解写下来,希望对大家有用。个人觉得理解LINUX内核当中MMC/SD卡驱动程序构架是学习MMC卡驱动程序的重点,只有理解了它的基本框架或流程才能真正理解一个块设备驱动程序的写法,同时才能真正理解LINUX设备驱动模型是如

    2022年6月14日
    42
  • java全局变量和局部变量的区别_全局变量和局部变量的定义

    java全局变量和局部变量的区别_全局变量和局部变量的定义全局变量是一个运行时刻实体,它在程序的整个执行过程中都存在。全局变量生命周期为程序开始到程序结束。全局变量显示初始化时,或者未初始化时,在程序映像中有不同的分区:已初始化的全局变量是可执行模块的一部分。未初始化的全局变量则不是可执行模块的一部分,只有当定义它们的程序被调用时(即执行时),才分配空间,声明或定义时并不分配。未初始化的全局变量在运行时被初始化为0或null。

    2022年8月21日
    10
  • PCA:详细解释主成分分析「建议收藏」

    PCA:详细解释主成分分析「建议收藏」1PCA目的/作用主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原数据点的特性。PCA降维的目的,就是为了在尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大投影信息量的维度上进行投影。将原特征投影到…

    2022年5月17日
    43
  • 想帮帮即将上线OpenClaw一键免费部署:含Skills安装更省心

    想帮帮即将上线OpenClaw一键免费部署:含Skills安装更省心

    2026年3月14日
    1
  • 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)

    5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)文章目录 0 思维导图 1 数据库完整性概述 2 实体完整性 1 实体完整性的定义 2 实体完整性检查和违约处理 2 参照完整性 1 参照完整性定义 2 参照完整性检查和违约处理 0 思维导图 1 数据库完整性概述简单介绍 首先先概述一下数据库完整性指的是什么 数据库完整性指的是数据的正确性和相容性 数据的正确性是指数据是符合现实世界语义 反映当前实际状况的 比如说人类的性别 只能是男和女 数

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号