thinkphp5使用redis事务实现抢购

redis事务实现抢购

```
Cache::store('redis')->watch('sales');
$sales = Cache::store('redis')->rawCommand('get','sales');
$n = 10;
if ($sales >= $n) {
exit('秒杀结束');
}
//开启事务
Cache::store('redis')->multi();
Cache::store('redis')->incr('sales'); //将 key 中储存的数字值增一 ,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
$res = Cache::store('redis')->exec(); //成功1 失败0
if ($res) {
$check = Db::name('goods_list')->where('id',1)->find();
if($check['goods_number'] > 0){
//秒杀成功
Db::name('goods_list')->where('id',1)->setInc('sold_number');
Db::name('goods_list')->where('id',1)->setDec('goods_number');
$time = time();
$sql = "INSERT INTO `goods_order` ( `sid`, `order_sn`, `username`, `goods_id`) VALUES (1, '20220123180655265788', '1381646', 1)";
Db::name('goods_order')->execute($sql);
Cache::store('redis')->expire('sales',60);
}
} else {
exit('抢购失败');
}
```

    A+
发布日期:2022年01月25日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: