首页 > 数据库 >redission同时加多个锁

redission同时加多个锁

时间:2022-08-30 13:22:06浏览次数:65  
标签: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
From: https://www.cnblogs.com/maohuidong/p/16638941.html

相关文章

  • Vue上传多个文件
    首先现在form表单中定义上传组件,<el-form-itemprop="files"><el-uploadclass="upload-demo"action="#":auto-up......
  • JS 多个 if 判断丝滑
    多个if判断,看着很乱,使用优雅的代码实现一个判断if(fruit=='apple'){console.log('red');}俩个判断if(fruit=='apple'||fruit=='strawberry')......
  • 打开对话框选择多个文件进行汇总
    1、打开对话框选择文件,可以多选2、将选中的文件进行循环,逐一打开将其中的数据汇总到总表里,然后关闭这个文件3.将copy来的数据在总表里向下增加 Sub导入多工作簿()Di......
  • List集合拆分为多个List
    publicstatic<T>List<List<T>>split(List<T>resList,intsubListLength){if(CollectionUtils.isEmpty(resList)||subListLength<=0){......
  • 让你的PLC支持多连接,多电脑同时访问一个PLC 连接PLC的权限设置,PLC同时多连接
    要明白一个技术,首先要明白它到底是解决什么问题的?你是不是有以下的困扰1.我有个三菱的PLC,只能配置一个端口,但是有多台电脑需要从PLC进行读写,因为三菱是单链接的,所以直接读......
  • element-UI dropdown 传多个参数
    <el-tree:data="layersName":props="defaultProps"node-key="id":default-checked-keys="checked"show-checkbox@check-change="handleCheckChange"dragg......
  • Linux--完整克隆虚拟机后无法同时上网
    两个虚拟机网络适配器都为NAT模式,同时启动后,总有一个不能上网。原因:其中一个虚拟机是另一个虚拟机整体复制过来的,MAC地址一样,所以无法同时上网。修改mac地址即可解决!!!!!!!!!!!!!!!!!!!!!!!!!!!1、......
  • QT使用HTTP下载来实现程序下载自动安装退出,同时读取JSON更新信息。
    最近在用QT开发一套免费的HelpDesk系统,参考了网上的方法,实现了程序自动下载更新和程序自动退出再安装新程序,为了感谢网页的无私分享,自己也特地分享给大家,希望可以帮助到大......
  • 天地图添加多个覆盖物,点击切换选中icon
      天地图添加多个覆盖物,点击覆盖物,切换选中的icon,移除之前的icon,再次点击移除之前的。。。这个是react写的,先是确定中心位置,然后渲染点位,添加覆盖物,选中icon的不同, ......
  • excel如何将多个单元格内容合并到一个单元格中
    excel应用过程中经常会有需要将多个单元格的内容合并在一起输入到单元格当中,这里给大家分享一下方法工具/原料excel2016方法/步骤 将单元格A2,B2,C2中的......