<?php
$redis = new Redis();
$host = 'localhost';
$port = 6379;
$redis->connect($host,$port);
//redis 是单线程
if($redis->exists('lockFlag')){
return json_encode(array('status'=>false,'msg'=>'请稍后重试'));
}else{
try{
//加锁
$redis->set('lockFlag','isLocked',10);
//获取库存数
$stock = $redis->get('stock');
if($stock > 0) {
$redis->decrBy('stock',1);
//执行相应逻辑,尽量简单
}else{
//优化:库存不足情况下,直接提示相应信息,不用操作redis了,在外面另外加判断
return json_encode(array('status'=>false,'msg'=>'库存不足'));
}
} finally {
$redis->del('lockFlag');
}
}
?>
使用php和redis实现简单的分布式锁
最新推荐文章于 2024-03-05 16:57:16 发布
本文介绍了一种利用Redis的单线程特性进行库存扣减的方法,通过加锁避免并发问题,确保库存准确无误地减少。代码示例展示了如何在PHP中连接Redis,检查库存,执行扣减操作,并释放锁。
2080

被折叠的 条评论
为什么被折叠?



