单体项目springboot快速搭建完毕,控制层代码
浏览器访问后单线程访问没有问题
多线程访问代码改造如下
部署两个节点,springboot下修改端口,启动两个服务
配置nginx
jmeter模拟200并发请求,jvm 同步锁会出现bug.重复卖的问题
redis锁实现分布式锁
类似lua脚本,下面那句代码原子性的实现上两句代码的功能,保持每个请求的时间一致的话问题不大,如果并发请求每个执行时间有差异,会导致锁永久失效,比如第一个请求执行到一半锁时间过期了,第二个请求就可以进来拿到锁,那么第一个请求最后释放的就是第二个请求的锁,依次类推那么就会导致锁永久失效
进一步优化:锁的值为每个请求进来生成的一个UUID,锁释放之前进行判断是不是自己加的锁的值
现在问题是每个请求的时间和锁的过期时间怎么把握。
redisson分布式锁框架,
引入依赖
实现原理
代码
lua脚本