php redis冻结库存实现
以预售活动支付定金为例
$frozen_num = 0; //定义初始冻结库存为0
$ApiRedis = new \Addons\Api\RedisController(); //封装的redis类初始化方法已经链接了redis与选择了数据库
$redis_key = 'retail_advance_frozen_goods_' . $advance_bill['id'] . '_goods_id_' . $goods_id; //key $advance_bill['id'] 预售活动id $goods_id 商品id
$redis_time = ($advance_bill['tail_end_time'] - time())*1; //redis 保存时间秒 尾款结束时间减去当前时间
$advance_frozen_goods = $ApiRedis::$redis->mget($ApiRedis::$redis->keys($redis_key)); //查询之前冻结的信息
if($advance_frozen_goods){
foreach ($advance_frozen_goods as $key=>&$val){
$frozen_num += json_decode($val,true)['num'];
}
}
$frozen_num = round($frozen_num + $num, 3); //购买的数量 + 冻结的库存
$redis_save = array(
'advance_id' => $advance_id,
'num' => $frozen_num
);
$ApiRedis::$redis->setex($redis_key, $redis_time, json_encode($redis_save)); //替换该活动商品的值存入nosql 尾款结束后自动释放 尾款支付成功后商品库存减少,然后再次查询冻结库存,减去购买的数量重新存入nosql即可