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 '购买成功'; }