分布式锁
JVM 自带的 synchronized 及 ReentrantLock 锁都是单进程内的,不能跨进程,如下,同时来个两个请求被分配到不同的tomcat,这种锁将失效:
REDIS 实现分布式锁
可以借助 REDIS 的setnx 命令实现:
https://blog.csdn.net/T_Y_F_/article/details/144238022
注:redis 的工作线程为单线程
实现代码,版本1:
目前版本还存在问题:
这两行代码为非原子操作, 解决方案:
设置锁的时候使用带过期时间的重载方法: