欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 【超详细】使用RedissonClient实现Redis分布式锁

【超详细】使用RedissonClient实现Redis分布式锁

2025/2/23 20:08:52 来源:https://blog.csdn.net/qq_44082755/article/details/139669479  浏览:    关键词:【超详细】使用RedissonClient实现Redis分布式锁

使用RedissonClient实现Redis分布式锁是一个非常简洁和高效的方式。Redisson是一个基于Redis的Java客户端,它提供了许多高级功能,包括分布式锁、分布式集合、分布式映射等,简化了分布式系统中的并发控制。

添加依赖

首先,你需要在你的项目中添加Redisson的依赖。以下是Maven配置:

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.2</version> <!-- 请根据需要选择最新版本 -->
</dependency>

配置RedissonClient

然后,你需要配置RedissonClient来连接Redis服务器:

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;public class RedissonConfig {public RedissonClient getRedissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379"); // 配置Redis服务器地址return Redisson.create(config);}
}

也可以在配置文件中配置你的redis连接,具体可以自行百度

创建RedissonTool工具类

@Component
public class RedissonTool {private final Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate RedissonClient redissonClient;/*** 获得锁的对象** @param lockKey 锁的key值* @return 锁对象*/public RLock getLockByKey(String lockKey) {RLock lock = null;try {lock = redissonClient.getLock(lockKey);} catch (Exception e) {logger.error("[RedissonTool.getLockByKey] getLock is exception}", e);}return lock;}/*** 获取锁是否成功** @param lock 锁对象* @return true=成功,false=失败*/public Boolean isTryLock(RLock lock) {//默认是通过boolean result = true;//获得锁的对象if (lock != null) {try {result = lock.tryLock();} catch (Exception e) {this.logger.error("[RedissonTool.getLockByKey] lock.tryLock is excepiton}", e);}}return result;}}

使用分布式锁

  1. 使用tryLock()
RLock lock = redissonClient.getLock("myLock");
boolean isLocked = false;
try {isLocked = lock.tryLock(lock); if (isLocked) {// 执行临界区代码} else {// 未获取到锁的处理逻辑}
} catch (InterruptedException e) {e.printStackTrace();
} finally {if (isLocked) {lock.unlock(); // 解锁}
}
  1. 直接使用 lock.lock()
RLock lock = redissonTool.getLockByKey(CacheConstants.ORDER_RESULT_DEAL + outTradeNo);
lock.lock(); // 直接获取锁,阻塞式
// 执行业务逻辑
lock.unlock(); // 解锁

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词