//当队列存在任务->出队
$llen = $redis->lLen($redisKey);
//删除Key
if (empty($llen)) {
$redis->del($redisKey);
}
$start = time ();
while ( $llen ) {
if (time () - $start > 1800) { // 超时30分钟
break;
}
$order_code = $redis->lpop ( $redisKey );
//移除队列中重复的订单
$redis->Lrem ( $redisKey,$order_code ,1);
if (! $order_code) {
Common_Common::myEcho("队列中没有需要处理的订单");
break;
}
$processNum++;
//检查库存
$obj = new Service_OrderDispatchProcess();
$rs = $obj->updateOrderStatus($order_code);
if (isset($rs['orderStatus']) && $rs['orderStatus'] == '4') {
$success++;
}
Common_Common::myEcho(print_r($rs, true));
}
$pageSize = 500;
$page = $loop = 1;
$processNum = $success = 0;
//排序
$orderBy = " GROUP BY o.order_id ORDER BY o.order_id ASC";
$db = Common_Common::getAdapter();
$obj = new Process_RequestCounter ();
$redis = $obj->getRedis();
if ($redis == null) {
return $result;
}
// Redis方式
Common_Common::myEcho('使用Redis方式,Key:' . $redisKey);
$llen = $redis->lLen($redisKey);
//当队列不存在时,再写入
if (empty($llen)) {
//设置超时时间
$redis->expire($redisKey, 2 * 60 * 60);
$mainSql = self::getAbnormalOrdersMainSql($condition);
$count = $db->fetchOne("select COUNT(DISTINCT o.order_id) " . $mainSql);
Common_Common::myEcho('select COUNT(DISTINCT o.order_id) ' . $mainSql);
$pageCount = ceil($count / $pageSize);
Common_Common::myEcho("订单总数:" . $count . " 总页数:" . $pageCount . " 每页:" . $pageSize);
while ($page <= $pageCount) {
$start = ($page - 1) * $pageSize;
$sqlList = "select o.order_code " . $mainSql . $orderBy . " LIMIT {$pageSize} OFFSET {$start};";
$orderRows = $db->fetchAll($sqlList);
$page++;
foreach ($orderRows as $val) {
//删除重复订单
$redis->lrem($redisKey, $val ['order_code'], 1);
// 写入订单队列
$redis->rpush($redisKey, $val ['order_code']);
Common_Common::myEcho("rpush:" . $val ['order_code']);
}
}
}
注意事项:
1、服务器Redis版本问题
2、Redis是否配置了持久保存
3、Redis是否配置了密码
4、当Redis未启用时,如果报警,或其它的应对方案