当前位置:   article > 正文

Redisson分布式锁

redisson分布式锁

目录

一、分布式锁

1、分布式锁的设计原则

2、分布式锁的实现方案

二、Redisson

三、Redisson分布式锁

1.引入Redisson依赖

2.配置Redis

3.注入RedissonClient

4.使用RLock

总结


一、分布式锁

分布式锁是分布式系统中控制共享资源访问的一种锁实现,用分布式锁控制多个进程对资源的访问。

1、分布式锁的设计原则

  • 互斥性。同一时刻锁只能被一个线程持有。
  • 超时释放。锁定资源的客户端崩溃时,可以避免死锁,防止不必要的线程等待和资源浪费。
  • 可重入性。一个线程在持有锁的情况可以对其再次请求加锁,防止锁在线程执行完临界区操作之前释放。
  • 高性能和高可用。加锁和释放锁的过程性能开销要尽可能的低,同时也要保证高可用,防止分布式锁意外失效。
  • 支持阻塞和非阻塞。如果获取不到锁,不能无限期等待。
  • 支持公平锁和非公平锁
  • 避免死锁和锁失效

2、分布式锁的实现方案

  • redis 实现分布式锁。
  • zookeeper实现分布式锁。
  • 数据库实现分布式锁。

二、Redisson

Redisson是架设在Redis基础上,通讯基于Netty的中间件,企业级开发中使用Redis的最佳范本。Redisson 对象提供了关注点分离,这使开发者可以将注意力集中在数据建模和应用程序逻辑上。

三、Redisson分布式锁

1.引入Redisson依赖

  1. <dependency>
  2.     <groupId>org.redisson</groupId>
  3.     <artifactId>redisson-spring-boot-starter</artifactId>
  4.     <version>3.17.5</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.springframework.boot</groupId>
  8.     <artifactId>spring-boot-starter-data-redis</artifactId>
  9. </dependency>

2.配置Redis

  1. spring:
  2.   redis:
  3.     database: 
  4.     host:
  5.     port:
  6.     password:

3.注入RedissonClient

  1. @Autowired
  2. private RedissonClient redissonClient;

4.使用RLock

  1. RLock rLock = redissonClient.getLock(orderId);
  2. try {
  3.     boolean lockFlag = rLock.tryLock(waitTime, TimeUnit.SECONDS);
  4.     if (lockFlag) {
  5.         // TODO 业务逻辑
  6.     }
  7. } catch (Exception e) {
  8.     log.error("处理失败", e);
  9. }finally {
  10.     try {
  11.         rLock.unlock();
  12.     } catch (IllegalMonitorStateException e) {
  13.         log.warn("没有获取到锁,解锁失败");
  14.     }
  15. }

总结

本文讲述了分布式锁的特征以及Redisson分布式锁的基础用法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/710701
推荐阅读
相关标签
  

闽ICP备14008679号