猿问

php 使用redis进行秒杀的思路

各位大大,问题大概是这样的,因为项目中设计一个比较简单的类似于秒杀的东西
但几经搜索之后 都说使用redis的原子性 采用队列来处理, 然后去看了一下redis的一些命令
又结合了别人的一些代码 大致思路是以下这样

我有几个问题
1.什么时候触发 左进右出 取数据这个流程呢 ,条件是什么呢
2.还是说 把商品数量提到 检查队列长度之前??
3.或者说我的思路 本身就有很大漏洞或者 歪了

请不留情 斧正

   
   
   
    //用户进入
    //获取用户信息
    //连接redis
    //加入队列msList
    
    //这个位置检查缓存的商品数量??   为0就直接返回了 不用进行下面的操作?
    
    //检查队列长度  
    //--1.大于200就返回  抢购人数过多,跳转抢购结束页面,结束,终止秒杀
    //--2.小于等于就加入队列
    
    //判断等于200触发下面操作???

    //左进右出  取数据
    //----查询商品数量为num   
    //-------1.无则 加入redis缓存   
    //-------2.有则判断是否大于0 
    //----------1.小于等于就退出 ,跳转库存不足页面,结束
    //----------2.无则判断
    //-------------进入的用户左进右出
    //-----------------事务
    //-----------------1.插入成功,num-1,返回用户消息,结束
    //-----------------1.插入失败,回滚,返回用户消息,结束
    //释放redis

    //订单超时,库存增加??
汪汪一只猫
浏览 326回答 1
1回答

LEATH

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