2021-08-31分布式锁

例如有一个定时任务,每天半夜执行任务(对数据天数加一操作); 当此应用被搭建成集群的时候,就会有问题,问题就是每天半夜这个定时任务,由于集群,每个实例都会执行,这就会产生错误;
分布式锁为了解决在分布式中,保证只有一个jvm执行,而不是同时执行;

分布式锁的核心思路:
1 获取锁 jvm获取全局唯一标识,获取到就可以去执行了
2 释放锁 释放该全局唯一标识,然后其他jvm重新获取锁
3 超时锁 根据过期时间释放锁,防止死锁(1 等待获取锁的超时时间 2 已经获取锁出意外不释放,相当于一个锁的有效期)

基于redis单机版实现的分布式锁主要是利用redis中的setNx思想;
setNx 当key不存在,创建一个key设置成功; 当key存在,不做任何操作;

实现步骤:
1 获取锁,根据一个key 获取到 有效期的一个锁,在有效期内,其他线程等待,无法获取
2 根据key和value 释放锁,为了比对当前key 获取的value ,与1 步骤中返回的value 是否一致,判断是否释放的为自己的锁

可以忽略此步骤
3 当业务执行时间大于有效期的问题: 就是在执行业务逻辑的时候,提交事务之前要判断是否在有效期内,否则回滚事务;

你可能感兴趣的:(springcloud,分布式,redis,java,缓存,多线程)