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有新数据 都会插入数据库后 然后移除