redis实现消息队列教程

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

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


<?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

?>
</pre>

第二步 shell脚本写定时器每秒触发 这个PHP文件
<pre>
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
</pre>

 

保存为crontab.sh

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

 

 

 

posted @ 2019-11-12 14:28  newmiracle宇宙  阅读(179)  评论(0编辑  收藏  举报