zoukankan      html  css  js  c++  java
  • 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 '购买成功';
        }
  • 相关阅读:
    安装node和npm
    安装git
    常用软件
    vscode常用插件
    git生成ssh key
    04.接口初始化规则与类加载器准备阶段和初始化阶段的意义
    03.编译期常量与运行期常量的区别与数组创建本质分析
    02.常量的本质含义与反编译及助记符
    01.类加载,连接与初始化过程
    HTTP 状态码大全
  • 原文地址:https://www.cnblogs.com/songxuan/p/9711969.html
Copyright © 2011-2022 走看看