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 '购买成功';
        }
  • 相关阅读:
    Directx 3D编程实例:多个3D球的综合Directx实例
    利用组策略禁用Oultook 各个版本的缓存模式!
    node-mongo-native1.3.19连接mongo的最优方法
    BT5之网络配置
    BT5之配置笔记
    Linux常用命令大全
    Linux下的基本网络配置
    SQLMAP系列教程
    重燃你的PHP安全分析之火
    Metasploit渗透测试魔鬼训练营
  • 原文地址:https://www.cnblogs.com/songxuan/p/9711969.html
Copyright © 2011-2022 走看看