秒杀案例:
<?php
$useTotal = self::getUseTotal($id); //优先从reids取值,没有取数据库
$key = self::USETOTAL_CACHE . $goods_id;
$redis = self::getRedis();
$redis->watch($key);
if ($useTotal + $num > $info['total']) {
echo ('剩余夺宝码不足,购买失败');
}
$redis->multi();
$redis->incrby($key, $num);
$res = $redis->exec();
if ($res) {
//扣减商品 数量,保存到数据库
}
根据这个原理,我们可以watch 来写商品的购物车,支付订单之前watch 商品的标志位(商品数量等于0的时候变化),标志位变化则支付失败。