public function _initialize(){
parent::_initialize();
$goods_id = I("goods_id",'0','intval');
if($goods_id){
$this->goods_id = $goods_id;
$this->user_queue_key = "goods_".$goods_id."_user";//当前商品队列的用户情况
$this->goods_number_key = "goods".$goods_id;//当前商品的库存队列
}
$this->user_id = $this->user_id ? $this->user_id : $_SESSION['uid'];
}
public function _before_detail(){
$where['goods_id'] = $this->goods_id;
$where['start_time'] = array("lt",time());
$where['end_time'] = array("gt",time());
$goods = M("goods")->where($where)->field('goods_num,start_time,end_time')->find();
!$goods && $this->error("当前秒杀已结束!");
if($goods['goods_num'] > $goods['order_num']){
$redis = $this->connectRedis();
$getUserRedis = $redis->hGetAll("{$this->user_queue_key}");//得到所有的用户
$gnRedis = $redis->llen("{$this->goods_number_key}");//获取库存的数量
/* 如果没有会员进来队列库存 */
if(!count($getUserRedis) && !$gnRedis){
for ($i = 0; $i < $goods['goods_num']; $i ++) {
$redis->lpush("{$this->goods_number_key}", 1);//将库存存到redis中
}
}
$resetRedis = $redis->llen("{$this->goods_number_key}");//获取库存的数量
if(!$resetRedis){
$this->error("系统繁忙,请稍后抢购!");
}
}else{
$this->error("当前产品已经秒杀完!");
}
}
public function goods_number_queue(){
!$this->user_id && $this->ajaxReturn(array("status" => "-1","msg" => "请先登录"));
$model = M("flash_sale");
$where['goods_id'] = $this->goods_id;
$goods_info = $model->where($where)->find();
!$goods_info && $this->error("对不起当前商品不存在或已下架!");
/* redis 队列 */
$redis = $this->connectRedis();
/* 进入队列 */
$goods_number_key = $redis->llen("{$this->goods_number_key}");
if (!$redis->hGet("{$this->user_queue_key}", $this->user_id)) {
$goods_number_key = $redis->lpop("{$this->goods_number_key}");//删除元素返回第一个元素
}
if($goods_number_key){
// 判断用户是否已在队列
if (!$redis->hGet("{$this->user_queue_key}", $this->user_id)) {
// 插入抢购用户信息
$userinfo = array(
"user_id" => $this->user_id,
"create_time" => time()
);
$redis->hSet("{$this->user_queue_key}", $this->user_id, serialize($userinfo));
$this->ajaxReturn(array("status" => "1"));
}else{
$modelCart = M("cart");
$condition['user_id'] = $this->user_id;
$condition['goods_id'] = $this->goods_id;
$condition['prom_type'] = 1;
$cartlist = $modelCart->where($condition)->count();
if($cartlist > 0){
$this->ajaxReturn(array("status" => "2"));
}else{
$this->ajaxReturn(array("status" => "1"));
}
}
}else{
$this->ajaxReturn(array("status" => "-1","msg" => "系统繁忙,请重试!"));
}
}
php结合redis秒杀
猜你喜欢
转载自blog.csdn.net/qq_40750454/article/details/82736168
今日推荐
周排行