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 '購買成功';
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM