Redis订单队列实例

//当队列存在任务->出队
$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未启用时,如果报警,或其它的应对方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少林码僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值