分布式锁 在分布式环境中,为了保证业务数据的正常访问,防止出现重复请求的问题,会使用分布式锁来阻拦后续请求。我们先写一段有问题的业务代码:
分布式锁需要解决的问题
我们可以把key理解为一个资源
由于上述方法中加锁和释放锁分别是原子的,但是两个过程组合到一起就不是原子的了,因此高并发情况下,原子性得不到满足,我们采用下面的方法去实现分布式锁 set key value ex|px nx|xx eg: set locktarget 122325 ex 10 nx
怎么办呢?我们可以让获得锁的线程开启一个守护线程(跟母线程消亡时间一致),用来给快要过期的锁“续航”。当过去了29秒,线程A还没执行完,这时候守护线程会执行expire指令,为这把锁“续命”20秒。守护线程从第29秒开始执行,每20秒执行一次。(System.currentTimeMillis() 获取两个当前时间,再取差值)