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


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

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

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

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

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

    public function ruhuo(){
            $redis = new 
    edis();
            $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 '购买成功';
        }
  • 相关阅读:
    json_encode不编码中文字符的方式
    网站备份脚本
    英语动词大全
    多线程和多进程的区别【转载网络】
    解决curl中errno为51和60的错误
    ps修改图片文字
    如何设计充值消费的数据表
    LoRa与NB-IoT对比(转载)
    vuejs 使用vue-cli引入bootstrap
    关于防火墙的规则
  • 原文地址:https://www.cnblogs.com/songxuan/p/9711969.html
Copyright © 2020-2023  润新知