php + Redis message queue is a time of between php + mysql insufficient performance intermediate processing scheme. By the middle of the process to ensure data availability and accuracy. The server requests for large moment, the pressure is large database. As a result of concurrent oversold large, resulting in a large amount of concurrent data duplication.
Process: php accept requests and data -> php redis write data queue (enqueue) -> shell timing of writing data read queue call php MySQL (dequeued)
Implementation code:
Into the team: inqueue.php
php
- <?php
- $redis = new redis();
- $redis->connect('127.0.0.1',6379);
- $redis -> select('1');
- $redis->auth('');
- Data $ = [ A , B , C , D , E , F , G , H ]; // this may be get or post requests over the data
- $data = json_encode($data);
- $in = $redis->rpush('queue',$data);
- if($in){
- echo "into team success" ;
- }
A team: outqueue.php
php
- #!/usr/bin/php
- <?php
- $redis = new redis();
- $redis->connect('127.0.0.1',6379);
- $redis -> select('1');
- $redis->auth('');
- $value = $redis->lpop('queue');
- $value = json_decode($value,true);
shell process.sh: regular script calls outqueue.php
php
- # Be called once per minute
- * * * * * /usr/local/nginx/html/process.sh
php
- #!/bin/bash
- #file_name : process.sh
- #author: zuoping
- php /usr/local/nginx/html/outqueue.php
* If you call every minute frequency is not enough, you can call the script executed multiple times, such as:
php
- #!/bin/bash
- #file_name : process.sh
- #author: zuoping
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- php /usr/local/nginx/html/outqueue.php
- # This one minute call many times.
View current data in the queue:
php
- <?php
- $redis = new redis();
- $redis->connect('127.0.0.1',6379);
- $redis -> select('1');
- $redis->auth('');
- $list = $redis->lrange('queue',0,-1);
- var_dump ( $ list );