博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于redis的消息队列和键空间通知实现商品抢购和限时支付
阅读量:5834 次
发布时间:2019-06-18

本文共 1743 字,大约阅读时间需要 5 分钟。

基于Redis的消息队列实现固定库存商品抢购

//商品总库存需要在后台写入到库存队里中,提前写入$redis = new Redis();$redis->connect('127.0.0.1',6379);$redis->auth('alloc');$redis->select(1);//获取库存并减一写入队列$k = $redis->lPop('sale_count');echo $k;if($k>1){    if($k-1 == 0){        $redis->del('sale_count');    }else{        $redis->lPush('sale_count',$k-1);    }    echo '抢购成功!';}else{    echo '售卖完毕!';}

基于上面的基础解决购买数量存储,超时不支付订单取消订单并恢复库存

connect('127.0.0.1', 6379);$redis->auth('alloc');$redis->select(1);//$user_id = rand(1, 10000);//随机模拟用户ID 不去重复了实际情况下没有重复的$buy_num = rand(1, 9);//随机模拟购买数量//获取库存并减一写入队列$k = $redis->lPop('sale_count');if ($k > 1) { if ($k - $buy_num <= 0) { exit('库存不足'); }else{ $redis->rPush('get_good_list', $user_id);//将抢到顺序插入队列,在守护进程1中处理 $redis->setex($user_id, 1800, $buy_num);//设置超时时间30分钟 $redis->rPush('sale_count', $k - $buy_num); } echo '抢购成功!,请五分钟内支付';} else { echo '售卖完毕!';}
connect('127.0.0.1', 6379);$redis->auth('alloc');$redis->select(1);//while (1){ $user_id = $redis->lPop('get_good_list'); if($user_id){ //获取购买数量 $buy_num = $redis->get($user_id); //创建订单 $order_no = createOder($user_id,$buy_num); //设置订单超时时间 $redis->setex($order_no,300,1);//5分钟未支付通知Daemon2.php }//}
connect('127.0.0.1', 6379);$redis->auth('alloc');$redis->select(1);//不超时$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);//创建事件监听,__keyevent@1__:expired,数字1代表数据库序号$redis->psubscribe(array('__keyevent@1__:expired'), 'keyCallback');// 回调函数,这里写处理逻辑function keyCallback($redis, $pattern, $chan, $order_no){ //获取订单信息 获取购买数量 $buy_num = getOderInfo($order_no); //关闭订单 closeOrder(); //加入库存 $redis->rPush('sale_count',$redis->lPop('sale_count')+$buy_num);}

转载地址:http://mkycx.baihongyu.com/

你可能感兴趣的文章
resultMap自定义某个javaBean的封装规则代码
查看>>
社交系统ThinkSNS+安装部署演示
查看>>
bash shell 中数组使用举例
查看>>
阿里云云计算ACP认证重点梳理4—对象存储OSS
查看>>
Java并发编程:Callable、Future和FutureTask
查看>>
MySQL原生语句个人补漏
查看>>
2018 FDA获批医疗器械盘点,政策红利能否继续?
查看>>
网络攻防“三剑客”正式加盟墨者安全 担任首席安全顾问
查看>>
Android实战_note1(MyMirror_一款小型摄像处理的App)
查看>>
阿里与瑞金医院发布首个机器智能糖尿病知识图谱,由近2000位开发者参建
查看>>
揭秘 DockerCon 重量级演讲嘉宾(七)
查看>>
C++进程间通信的十一种方法
查看>>
雷锋网和 AI 帮你找个女朋友,你信吗?
查看>>
不忘初心——做世界上最流行的云数据库
查看>>
有律师提出,UI只包含移动APP的设计页面,并不包含管理移动APP的电脑PC管理页面,此问题是否正确? 请问如何举证?...
查看>>
通俗易懂,C#如何安全、高效地玩转任何种类的内存之Memory<T>(三)
查看>>
Java多线程面试题
查看>>
怎样使用原型设计中的组件样式功能
查看>>
Spark读写OSS并使用OSS Select来加速查询
查看>>
图片单选多选选择动画
查看>>