为了账号安全,请及时绑定邮箱和手机立即绑定

php 使用redis进行秒杀的思路

php 使用redis进行秒杀的思路

PHP
汪汪一只猫 2019-03-09 07:57:11
各位大大,问题大概是这样的,因为项目中设计一个比较简单的类似于秒杀的东西但几经搜索之后 都说使用redis的原子性 采用队列来处理, 然后去看了一下redis的一些命令又结合了别人的一些代码 大致思路是以下这样 我有几个问题1.什么时候触发 左进右出 取数据这个流程呢 ,条件是什么呢2.还是说 把商品数量提到 检查队列长度之前??3.或者说我的思路 本身就有很大漏洞或者 歪了 请不留情 斧正 //用户进入 //获取用户信息 //连接redis //加入队列msList //这个位置检查缓存的商品数量?? 为0就直接返回了 不用进行下面的操作? //检查队列长度 //--1.大于200就返回 抢购人数过多,跳转抢购结束页面,结束,终止秒杀 //--2.小于等于就加入队列 //判断等于200触发下面操作??? //左进右出 取数据 //----查询商品数量为num //-------1.无则 加入redis缓存 //-------2.有则判断是否大于0 //----------1.小于等于就退出 ,跳转库存不足页面,结束 //----------2.无则判断 //-------------进入的用户左进右出 //-----------------事务 //-----------------1.插入成功,num-1,返回用户消息,结束 //-----------------1.插入失败,回滚,返回用户消息,结束 //释放redis //订单超时,库存增加??
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

题主可以逆向思考这个秒杀问题,由于Redis的list数据结构是不可能到达“负”长度的,所以可以把需要被秒杀的商品信息和一个唯一编号预先放到指定商品类型的唯一队列中,用户请求时直接lpop出结果,不可能出现超量的问题,很多东西都免了。

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 325 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信