public function index(){
$redis = new \redis();
$result = $redis->connect('127.0.0.1', 6379);
//判断mywatchkey是否存在
if(!$redis->exists('mywatchkey')){ //不存在设置key为1
$redis->set("mywatchkey",1);
}
$mywatchkey = $redis->get("mywatchkey");
//抢购数量
$total = 10;
//mywatchkey 默认为1 每次抢购成功+1 当他小于等于10时 可抢购
if($mywatchkey <= $total){ //数量不到10 可以抢购
//开始事务,实时监控mywatchkey 如果运行过程中值变了则 exec时返回false
$redis->watch('mywatchkey');
$redis->multi(); //启动一个新事务
$redis->incr('mywatchkey'); //设置mywatchkey加1
$result = $redis->exec(); //执行结果
$redis->unwatch('mywatchkey'); //取消监控
if($result){ //执行成功,抢到了 写入数据库操作
echo ' success <br/> ';
echo '剩余'. intval($total-$mywatchkey) .'个';
}else{ //失败了 没抢到
echo '很遗憾,没抢到!';
}
}else{
exit('很遗憾,抢空了!');
}
}
php_redis使用事务实现抢购
最新推荐文章于 2023-07-16 08:36:59 发布