redis实现消息队列教程

redis实现消息队列教程(ps:这个消息队列因为是每秒插入一次数据 对于实时性比较高的就不要用消息队列了 就是直接插入数据库)

第一步:读取redis队列 并且存入数据库 后再移除 代码如下



<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/10/18
 * Time: 17:00
 */

file_put_contents('log.log', date("Y-m-d H:i:s") . " " . var_export('测试每秒请求', TRUE) . PHP_EOL, FILE_APPEND | LOCK_EX);
require_once 'queenchuli/common/mysql.php';

redisc('tutorial-list',99,'mobantestinfo');


/**
 * @param $key redis key
 * @param $percount 一次性操作多少数据
 * @param $table  要插入的数据库
 */
function redisc($key,$percount,$table){

    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->auth('zhiweiredis');

    $arList = $redis->lrange($key, 0, $percount);

    if(!empty($arList)){
        foreach ($arList as $k=>$v){
            $arList[$k]=json_decode($v,true);
        }
        for ($i = 0; $i < $percount; $i++) {
            $redis->rPop($key);
        }
        $db = new mysql();
        $isOk=inserts($arList, $table);
        if ($isOk==1) {

        } else {
            //如果失败 就记录sql语句
            file_put_contents('/data/web/mircoweb/wwwroot/Public/queenchuli/moban/log.log', date("Y-m-d H:i:s") . " " . var_export($isOk, TRUE) . PHP_EOL, FILE_APPEND | LOCK_EX);
        }
    }
}


/**
 * 插入数组记录的操作
 * @param array $array
 * @param string $table
 * @return boolean
 */
function inserts($array, $table)
{

    $i = 0;
    $arraynew=array();
    foreach ($array as $k => $v) {
        if ($i == 0) {
            //运行一次就可以了
            $keys = join(',', array_keys($v));
        }

        $val='('.join(',',$v).')';
        $arraynew[]=$val;
        $i++;
    }

    $values = join(',',$arraynew);
    $sql = "insert {$table}({$keys}) VALUES {$values}";

    $res = mysql_query($sql);
    if ($res) {
        return 1;
    } else {
        return $sql;
    }
}


// some code

?>

第二步 shell脚本写定时器每秒触发 这个PHP文件

    step=1 #间隔的秒数,不能大于60  
      
    for (( i = 0; i < 60; i=(i+step) )); do  
        $(php '/home/wwwroot/default/wordpress/cronb.php')  
		echo i
        sleep $step  
    done  
      
    exit 0  

保存为crontab.sh

然后sh运行它就是了 测试下 是不是有了 每次redis有新数据 都会插入数据库后 然后移除