案例引入
十个人枪两部手机,十个请求同时访问一个方法,数据库出现-8,导致超卖的业务场景
解决方案
单体服务用jvm锁解决超卖
集群超卖原因分析
有一个以上服务提供者,两个程序拿到两把锁,不具备互斥性,就像一个房间有两个门
分布式锁思路
把锁交给第三方,如mysql,redis,zookeeper(让两个们使用同一把钥匙)
mysql分布式锁思路
利用mysql的主键唯一性或者唯一索引,进行sql操作之前先插入一个主键或唯一索引,执行完后删除
redis单节点方案(击穿)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BqY9aO7W-1655255625157)
redis如果没有释放锁会形成死锁
redis死锁解决方案
设置过期时间