如何合理的控制锁的有效时长,根据业务执行时间预估由于网络等原因存在不确定性。所以应该根据监控业务执行来动态的给锁续期,可以使用redisson实现的分布式锁,也是基于setnx命令实现的,加了看门狗来动态续期:
实例代码如下:其中如果不加锁自动释放时间参数,则会默认使用看门狗给锁自动续期。
redisson实现的分布式锁是可重入的,即在同一个线程里同一个key,可以获取多次锁,如下:
注意如下:redis主从复制中,主节点用于写操作,从节点用于读操作,当在获取锁时,主节点宕机了,从节点会自动升级为主节点,此时其他线程从新的主节点获取相同的锁,此时无法实现主从数据一致问题,redisson无法解决,可以用红锁解决,但是性能太低。如果非要保证数据的强一致性,就采用zookeeper实现的分布式锁。