标签:redissonClient 加锁 return 多个 RLock multiLock 同时 redission public
业务场景:
比如:给某条记录点赞时, 有两个条件:(1)本条记录有点赞限制 (2) 点赞人有点赞限制。
问题: 并发时,需要加锁, 而且需要同时加两把锁。
工具类:
@Service
public class RedissonService{
@Autowired
private RedissonClient redissonClient;
public RedissonClient getRedissonClient() throws IOException {
return redissonClient;
}
/**
* 获取锁
*/
public RLock getRLock(String objectName) {
return redissonClient.getLock(objectName);
}
/**
* @desc : 同时加多个锁
**/
public RLock getMultiLock(RLock... locks){
return redissonClient.getMultiLock(locks);
}
}
业务逻辑:
// 加锁1
RLock lock1 = redissonService.getRLock("xxx1");
// 加锁2
RLock lock2 = redissonService.getRLock("xxx2");
RLock multiLock = redissonService.getMultiLock(lock1, lock2);
try {
boolean bs = multiLock.tryLock(2, 3, TimeUnit.SECONDS);
if (!bs) {
log.info("没有获取到分布式锁");
ApiResult.fail("并发错误,请重试");
}
// 业务逻辑
}catch (Exception ex){
log.error("异常,{}", ex);
return ApiResult.fail("请求异常");
}finally {
if(multiLock.isHeldByCurrentThread()) {
multiLock.unlock();
}
}
}
参考:https://www.modb.pro/db/193555
https://baijiahao.baidu.com/s?id=1736377262695968742&wfr=spider&for=pc
标签:redissonClient,加锁,return,多个,RLock,multiLock,同时,redission,public 来源: https://www.cnblogs.com/maohuidong/p/16638941.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。