cache 订单队列 - TP5
使用cache实现一个简单粗糙的订单推送队列
Linux 定时任务
* * * * * /usr/bin/curl http://tc.m.com/test.php
/**
* User: [一秋]
* Date: 2017/9/18
* Time: 上午8:56
* Desc: 成功来源于点滴
*/ namespace app\api\service; //订单队列
use app\api\model\Order; class OrderQueue
{
private $order_queue;
private $key;
private $expire_time = 60; public $orderid; public function __construct()
{
$this->key = 'your key value';
$this->order_queue = $this->queryNotReceiveOrder();
} //查询未接订单
private function queryNotReceiveOrder()
{
$data = cache($this->key); if (!$data) {
$lists = Order::with('receiveOrder')
->field('orderid')
->order('ctime desc')
->where('orderstatus', '=', 2)->page(1, 10)
->select(); $data = [];
foreach ($lists as $key => $val) {
if ($val->receive_order == null) {
$data[] = $val->orderid;
}
} if (!empty($data)) { cache($this->key, $data, $this->expire_time); } } return $data;
} //有新的订单 添加到队列中
public function pushToQueue()
{ if (!$this->orderid) {
return true;
} if ($this->order_queue) { array_unshift($this->order_queue, $this->orderid); } else {
$this->order_queue = ["$this->orderid"];
}
$this->order_queue = $this->array_unique(); cache($this->key, $this->order_queue, $this->expire_time); return true; } //从订单队列中拉取数据 推送
public function pullFromQueue()
{ if ($this->order_queue) {
//提取第一个数据
// $first_orderid = array_shift($this->order_queue);
// Order::placeOrderGetuiList($first_orderid);
//推送完毕 存放到数组最后
// array_push($this->order_queue, $first_orderid); foreach ($this->order_queue as $key=>$val){
Order::placeOrderGetuiList($val);//推送订单。
sleep(10);
} // cache($this->key) ? cache($this->key, null) : true; }
return true;
} //从订单队列中 移除
public function clearOneOrder(){ if($this->order_queue){
$key = array_search($this->orderid,$this->order_queue);
if(!$key && $key != 0){
return true;
}
unset($this->order_queue[$key]);
cache($this->key,$this->order_queue,$this->expire_time);
} return true; } //数组去重
private function array_unique(){
return array_unique($this->order_queue);
} public function pushToList($order_arr){ if(!is_array($order_arr)){
return true;
}
foreach ($order_arr as $key=>$val){
$this->orderid = $val;
$this->pushToQueue();
}
return true;
} }
cache 订单队列 - TP5的更多相关文章
- 消息队列第二篇:MessageQueue实战(课程订单)
上一篇:消息队列介绍 本篇一开始就上代码,主要演练MessageQueue的实际应用.用户提交订单(消息发送),系统将订单发送到订单队列(Order Queue)中:订单管理系统(消息接收)端,监听消 ...
- MyBatis源码分析(3)—— Cache接口以及实现
@(MyBatis)[Cache] MyBatis源码分析--Cache接口以及实现 Cache接口 MyBatis中的Cache以SPI实现,给需要集成其它Cache或者自定义Cache提供了接口. ...
- Azure Messaging-ServiceBus Messaging消息队列技术系列3-消息顺序保证
上一篇:Window Azure ServiceBus Messaging消息队列技术系列2-编程SDK入门 http://www.cnblogs.com/tianqing/p/5944573.ht ...
- springboot~rabbitmq的队列初始化和绑定
配置文件,在rabbit中自动建立exchange,queue和绑定它们的关系 代码里初始化exchange 代码里初始化queue 代码里绑定exchange,queue和routekey 配置文件 ...
- PHP 消息队列 详解
前言:之前做过的一些项目中有时候会接触到消息队列,但是对消息队列并没有一个很清楚的认知,本篇文章将会详细分析和归纳一些笔记,以供后续学习. 一.消息对列概念 从本质上说消息对列就是一个队列结构的中间件 ...
- PHP消息队列实现及应用
目前对消息队列并不了解其原理,本篇文章主要是通过慕课网学习归纳的一些笔记,为后续学习打下基础. 众所周知在对网站设计的时候,会遇到给用户“群发短信”,“订单系统有大量的日志”,“秒杀设计”等,服务器没 ...
- php调用Redis队列使用例子
1.Controller顶部引入use think\Queue; 2.Controller调用Redis任务 // 1.当前任务将由哪个类来负责处理. $job = 'app\api\job\Resu ...
- PHP消息队列实现及应用_慕课网学习
https://blog.csdn.net/d_g_h/article/details/79643714 https://blog.csdn.net/tTU1EvLDeLFq5btqiK/articl ...
- PHP消息队列学习
在我们平常网站设计时,会遇到“给用户群发短信”,“商城订单系统大批量订单处理”,“商城秒杀活动”等需求,这些功能,都有一个共同的特点:就是在面对高迸发的同时,必须要保证系统处理数据的有效性.那么如何处 ...
随机推荐
- 跟面向对象卯上了,看看ES6的“类”
上回我们说到ES5的面向对象,以及被大家公认的最佳的寄生组合式继承.时代在进步,在ES6中对于面向对象这个大boss理所应当地进行了一次大改,从原先那种比较长的写法转变为"小清新" ...
- Java long类型和Long类型的那些事
还记得最近做了一个项目使用的是Long类型作为主键Id坑死人了,对于我们来说Long类型一样是一个包装类型,类似String类型,使用==符号进行比较的时候有时候会出现问题,建议适应equal()方法 ...
- Spring-mvc 静态资源不拦截
在Spring-mvc.xml文件中加入这个就可以了 <!-- 用于对静态文件进行解析 --> <mvc:annotation-driven /> <mvc:resour ...
- LNMP搭建环境遇到的N多坑
最近配置开发用的lnmp环境,环境配置完成后,爆500错误,查看nginx错误日志 open_basedir 将 PHP 所能打开的文件限制在指定的目录树,包括文件本身 错误日志显示,访问脚本不在 o ...
- PHP实现水印效果(文字、图片)
第一种 <?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文字 * $size 文字大小 * $pos 水印的位置 * $color 文字的颜色 ...
- Office 365 共享链接直接进入编辑
首先在Word online共享文档(不多赘述) 但这个链接打开的是预览视图,要点击右上角的"在浏览器中编辑"才能真正编辑. 但是很多情况都是没必要进入这个预览界面再编辑的.这多点 ...
- Nginx 调优经验记录
1.2017年连续爆出5.x版本xshell安全问题和intel的cpu设计漏洞 ,此时我就注意到尽量少暴露自己线上使用的工具以及版本.例如:mysql版本,以及缓存层策略,服务器版本等,以下为 隐藏 ...
- [Note] Apache Flink 的数据流编程模型
Apache Flink 的数据流编程模型 抽象层次 Flink 为开发流式应用和批式应用设计了不同的抽象层次 状态化的流 抽象层次的最底层是状态化的流,它通过 ProcessFunction 嵌入到 ...
- 跨站请求伪造攻击 CSRF
摘录: 1.跨站点请求伪造 首先,什么是跨站点请求伪造? 跨站点请求伪造-CSRF(Cross Site Request Forgery):是一种网络攻击方式. 说的白话一点就是,别的站点伪造你的请求 ...
- 【Unity3D】Unity3D 摄像机带透明截图
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/CropCamera.html ↓↓↓下面的废话可以不看↓↓↓ 最近处理了一批我的游戏的图标,步骤特别繁琐, 需要先 ...