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有新数据 都会插入数据库后 然后移除
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4088.html