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