博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP多进程开发与Redis结合实践
阅读量:6952 次
发布时间:2019-06-27

本文共 3621 字,大约阅读时间需要 12 分钟。

业务逻辑介绍:

  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

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://blog.51cto.com/laok8/2107892

你可能感兴趣的文章
bash位置参数的简介
查看>>
VirtualBox导入其他虚拟机后网络问题
查看>>
js 正则通过class查找Tag内的内容。
查看>>
Let's Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS
查看>>
.net 面试题系列四(附答案)
查看>>
sql server的并发性
查看>>
windows php启动浏览器
查看>>
CPP_类模板与模板类
查看>>
用CocoaPods做iOS程序的依赖管理
查看>>
虚拟机的类加载机制
查看>>
登录判断跳转页面
查看>>
多线程IO操作(扫描文件夹并计算总大小)
查看>>
读UNIX编程艺术(一)
查看>>
oracle存储过程获取异常信息码和异常信息
查看>>
大系统小做培训总结
查看>>
Web Service 那点事儿(3)—— SOAP 及其安全控制
查看>>
一步步制作rpm包
查看>>
App支付签名错误
查看>>
kali linux虚拟wifi搭建
查看>>
jquery设置元素的readonly和disabled
查看>>