redis消息队列,tp5.0,高并发,抢购

redis处理抢购,并发,防止超卖,提速

1.商品队列(List列表),goods_list           控制并发,防止超卖

2.订单信息(Hash集合),order_info          存放订单信息,后续处理

3.购买成功用户(Set集合),exist_list        set集合唯一性,防止用户重复购买

首先商品入库,存放redis列表

public function ruhuo(){
        $redis = new \redis();
        $redis->connect('127.0.0.1', 6379);
        for ($i = 1; $i <= 1000; $i++) {
            $redis->lpush('goods_list', $i);
        }
    }

抢购

public function 抢购(){
        $redis = new \Redis();
        $redis->connect('127.0.0.1', 6379);

        //通过查看 队列的长度来判断,货物是否被抢购完
        if($redis->lLen('goods_list')==0){
            return '已经卖完';
        }

        //获取用户 id
        $user_id=input('post.id');

        //通过 集合的唯一性,判读此用户是否已经购买
        if($redis->sIsMember('exist_list',$user_id)){
            return '你已经购买过了!';
        }
        //从商品队列删除一个商品,并获取值为商品 id
        $goods_id = $redis->rpop('goods_list');

        //订单信息
        $goods_info = array(
            'user_id'  =>$user_id,
            'goods_id' =>$goods_id,
            'time'     =>time(),
            ...
        );

        //订单信息暂存 redis 哈希表,后续处理
        $redis->hSet('order_info',$user_id,json_encode($goods_info));
        return '购买成功';
    }

 

转载于:https://www.cnblogs.com/songxuan/p/9711969.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值