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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Geth私链的多节点运行「建议收藏」

    Geth私链的多节点运行「建议收藏」前一阵分别介绍了在Ubuntu和CentOS下搭建基于Geth的以太坊私链,这篇文章介绍如何搭建Geth多节点的运行。提示:在Ubuntu和CentOS下搭建以太坊私链,请参考《在Ubuntu下使用Geth搭建自己的以太坊私有链》和《CentOS7下安装Geth,搭建以太坊私有链》一、在Windows下安装Geth为了方便测试,我在Windows下搭建了一个套Geth环境。安装方…

    2022年10月8日
    0
  • BYTE类型的使用

    BYTE类型的使用BYTE类型的使用:BYTE在VC的定义为Unsingnedchar,在语义上九可以理解为单个字符类型,而在实际应用中BYTE泽多应用在数据类型的使用上,如16进制数组(用于表示数据流),在本次使用的IP地址控件中用于表示Ip地址栏的四个IP地址值,这样就会与其本来的定义似乎有冲突。通过断点运行发现,系统对BYTE类型的处理是这样的:当输入数字类型的BYT

    2022年6月28日
    57
  • leapFTP上传网页到服务器,leapftp登录ftp服务器

    leapFTP上传网页到服务器,leapftp登录ftp服务器leapftp登录ftp服务器内容精选换一换本节为您介绍如何在本机使用远程登录工具MSTSC登录Windows弹性云服务器。弹性云服务器状态为“运行中”。如果弹性云服务器采用密钥方式鉴权,已获取Windows弹性云服务器的密码,获取方式请参见获取Windows弹性云服务器的密码。弹性云服务器已经绑定弹性公网IP,绑定方式请参见绑定弹性公网IP。使用MSTSC方式通过内网登录云服务器华为云帮助中心…

    2022年10月24日
    0
  • 使用 IntraWeb (16) – 基本控件之 TIWList、TIWListbox、TIWComboBox、TIWOrderedListbox

    使用 IntraWeb (16) – 基本控件之 TIWList、TIWListbox、TIWComboBox、TIWOrderedListbox

    2021年8月31日
    44
  • 收藏几款好用的网页下载工具(网页下载器)「建议收藏」

    收藏几款好用的网页下载工具(网页下载器)「建议收藏」收藏几款好用的网页下载工具(网页下载器)引言webzipTeleportUltraTeleportUltra小飞兔下载MihovPictureDownloaderWinHTTrackHTTrack仿站小工具引言有的人利用网页下载工具下载网站到本地进行慢慢的欣赏,有的人利用下载工具创建垃圾站。不管你是出于什么样的目的,下面这些工具软件你可以会需要。webzip一款国外的网页下载器,把一个网站下载并压缩到一个单独的ZIP文件中,可以帮您将某个站台全部或部份之资料以ZIP格式压缩起来,可供你日后

    2022年6月11日
    1.0K
  • 用python给女朋友表白_python绘制太阳花

    用python给女朋友表白_python绘制太阳花python表白玫瑰花绘制——情人节表白搬运不易,路过的各位大佬请点个赞————————————————版权声明:本文主要参考CSDN博主「sunie」的文章,参考博文链接:https://blog.csdn.net/weixin_43387647/article/details/88973568python表白玫瑰花绘制——情人节表白python表白玫瑰花绘制——情人节表白一、玫瑰花绘制一二、玫瑰花绘制二三、玫瑰花绘制三四、桃花绘制一、玫瑰花绘制一fig=plt.figure()a

    2022年8月31日
    1

发表回复

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

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