分布式锁的两种用法

1.定时任务
    定时任务可能会遇到的问题
        1.任务执行得太快,执行完后就解锁的话,因为两台服务器时间可能差几百毫秒,所以还是会触发两次
    
    通常的分布式锁

String value = String.valueOf(snowflakeConfig.snowflakeId());
try {
	boolean lock = redisService.lock(Key, value, 加锁超时时间, 重试次数);
	if (lock) {
		log.info("job start ...");
		//所执行的方法
		log.info("job end ...");
	}
} finally {
	redisService.unlock(Key, value);
}

   不解锁等超时后在解锁的分布式锁
        去掉finally
        
        
        
2.业务中的分布式锁
    有些功能我们只希望一个串行操作,同时操作也可以只需要重新进入方法

public void contractOperate() {
	String value = String.valueOf(snowflakeConfig.snowflakeId());
	boolean lock = redisService.lock(Key, value, 加锁超时时间, 重试次数);
	if (lock) {
		return operate(value);
	}
	try {
		Thread.sleep(睡眠时间);
	} catch (InterruptedException e) {
		log.errer("sleep errer {}", e);
	}
	return contractOperate();
}


private void operate(String value) {\
	try{
		//实际要处理的业务
	}
	finally {
		redisService.unlock(Key, value);
	}

}


    相当于在实际要处理的业务上套了一个分布式锁,没有锁的用户睡眠两面再次进入方法获取锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值