redis 分布式锁解决商品超卖问题
用redis的分布式锁可以解决商品超卖的问题,简单事例(基于YII2框架):
/** * @desc 加锁方法 * * @param $lockName string | 锁的名字 * @param $timeout int | 锁的过期时间 * @return 成功返回identifier /失败返回false */ public function getLock($lockName, $timeout=10) { #获取唯一标识符 $identifier=uniqid(); #过期时间 $timeout = intval($timeout); #查看$lockName是否被上锁,为$lockName设置过期时间,防止死锁 if($this->redis->setnx($lockName,$identifier)) { $this->redis->expire($lockName, $timeout); return $identifier; } return false; } /** * @desc 释放锁 * * @param $lockName string | 锁名 * @param $identifier string | 锁的唯一值 * * @param bool */ public function releaseLock($lockName,$identifier) { // 判断是锁有没有被其他客户端修改 if($this->redis->get($lockName)==$identifier) { $this->redis->multi(); $this->redis->del($lockName); #释放锁 $this->redis->exec(); return true; } else { #其他客户端修改了锁,不能删除别人的锁 return false; }
$name='Lock:goods_id'; $lockName=$name; $identifier = $this->getLock($lockName); if($identifier===false) { return new \app\coffeecore\BaseApiResponse([ 'code' => 1, 'msg' => '亲,该商品正在热销中,请稍后再试哦', ]); } /* 业务逻辑处理过程,商品生成订单减库存 */ //解锁 $this->releaseLock($lockName,$identifier);
♥ 作者:离岸少年
♠ 出处:https://www.cnblogs.com/jackzhuo/
♣ 本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2020-01-17 restful api的那些事