<?php
namespace Home\Controller;
use Think\Controller;
class RedisController extends CommonController {
public function index($pid){
$redis=new \Redis();
$redis->connect('127.0.0.1',6379);
$redis_name="miaosha:".$pid;
$project=M("project");
$info=$project->field('project_stock')->find($pid);
$sum=$info['project_stock'];
if($sum<=0){
echo "商品已经售馨,秒杀结束";
exit();
}
$len=$redis->llen($redis_name); //检查库存,goods_store:1 定义为健名
$count =$sum-$len; //实际库存-被抢购的库存 = 剩余可用库存
for($i=0;$i<$count;$i++){
$uid=rand(1000,9999);
$redis->rpush($redis_name,$uid.'%'.microtime());
// exit();
}
var_dump($redis->lrange("miaosha:".$pid,0,-1));//产看所有元素值
}
public function cun(){
$this->index(I('project_id'));
$redis=new \Redis();
$redis->connect('127.0.0.1',6379);
$redis_name="miaosha:".I('project_id');
//从列队最左侧取出一个值
$user=$redis->lpop($redis_name);
//然后判断这个值是否存在
if(!$user){
echo "秒杀结束";
exit();
}
//切割出时间和uid
$user_arr=explode('%',$user);
$data=[
'uid'=>$user_arr[0],
'ddate'=>$user_arr[1],
];
$m_follow=M("m_follow");
$a=$m_follow->add($data);
//数据库插入失败 回滚机制
if(!$a){
$redis->rpush($redis_name,$user);
}
$project=M("project");
$info=$project->field('project_stock')->find(I('project_id'));
//减少库存量
$pdata=[
'id'=>I('project_id'),
'project_stock'=>$info['project_stock']-1,
];
$project->save($pdata);
echo "秒杀成功";
$redis->close();
}
}