怎么在SpringBoot中利用Redisson实现一个分布式锁

  介绍

这篇文章给大家介绍怎么在SpringBoot中利用Redisson实现一个分布式锁,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

项目代码结构图:

<人物>

怎么在SpringBoot中利用Redisson实现一个分布式锁”>,</p> <p> <>强导入依赖</强> </p> <pre类= & lt; dependency>   & lt; groupId> org.redisson   & lt; artifactId> redisson   & lt; version> 3.8.0   & lt;/dependency>

<强>属性配置

应用程序。在弹出的菜单资源文件中添加单机和哨兵相关配置

server.port=3000      #,redisson  lock 单机模式   redisson.address=复述://127.0.0.1:6379   redisson.password=#哨兵模式   # redisson.master-name=,主人   # redisson.password=# redisson.sentinel-addresses=10.47.91.83:26379、10.47.91.83:26380 10.47.91.83:26381

注意:

这里如果不加复述://前缀会报URI构建错误

Caused :, java.net.URISyntaxException:, Illegal  character 拷贝scheme  name  at  index  0

更多的配置信息可以去官网查看

<强>定义锁的接口定义类

package  com.tuhu.thirdsample.service;      import  org.redisson.api.RLock;   import  java.util.concurrent.TimeUnit;/* *   ,* @author  chendesheng   ,* @create  2019/10/12  10点   ,*/public  interface  DistributedLocker  {      ,RLock 锁(String  lockKey);      ,RLock 锁(String  lockKey, int 超时);      ,RLock 锁(String  lockKey, TimeUnit 单位,,int 超时);      ,boolean  tryLock (String  lockKey, TimeUnit 单位,,int  waitTime,, int  leaseTime);      ,void 解锁(String  lockKey);      ,void 解锁(RLock 锁);   }

<>强锁接口实现类

package  com.tuhu.thirdsample.service;      import  org.redisson.api.RLock;   import  org.redisson.api.RedissonClient;      import  java.util.concurrent.TimeUnit;/* *   ,* @author  chendesheng   ,* @create  2019/10/12  10:49   ,*/public  class  RedissonDistributedLocker  implements  DistributedLocker {      ,private  RedissonClient  redissonClient;      ,@Override   ,public  RLock 锁(String  lockKey), {   RLock 才能;lock =, redissonClient.getLock (lockKey);   lock.lock才能();   return 才能;锁;   ,}      ,@Override   ,public  RLock 锁(String  lockKey, int  leaseTime), {   RLock 才能;lock =, redissonClient.getLock (lockKey);   lock.lock才能(leaseTime, TimeUnit.SECONDS);   return 才能;锁;   ,}      ,@Override   ,public  RLock 锁(String  lockKey, TimeUnit  unit , int 超时),{   RLock 才能;lock =, redissonClient.getLock (lockKey);   lock.lock才能(超时时间,单位);   return 才能;锁;   ,}      ,@Override   ,public  boolean  tryLock (String  lockKey, TimeUnit 单位,,int  waitTime,, int  leaseTime), {   RLock 才能;lock =, redissonClient.getLock (lockKey);   try {才能   ,,return  lock.tryLock (waitTime, leaseTime,,单位);   ,,},catch  (InterruptedException  e), {   ,,return 假;   ,,}   ,}      ,@Override   ,public  void 解锁(String  lockKey), {   RLock 才能;lock =, redissonClient.getLock (lockKey);   lock.unlock才能();   ,}      ,@Override   ,public  void 解锁(RLock 锁),{   lock.unlock才能();   ,}      ,public  void  setRedissonClient (RedissonClient  redissonClient), {   时间=this.redissonClient 才能;redissonClient;   ,}   }

<>强redisson属性装配类

package  com.tuhu.thirdsample.common;      import  lombok.Data;   import  org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;   import  org.springframework.boot.context.properties.ConfigurationProperties;   import  org.springframework.context.annotation.Configuration;/* *   ,* @author  chendesheng   ,* @create  2019/10/11  20:04   ,*/@ configuration   @ConfigurationProperties (=prefix “redisson")   @ConditionalOnProperty (“redisson.password")   @ data   public  class  RedissonProperties  {         ,private  int  timeout =, 3000;      ,private  String 地址;      ,private  String 密码;      ,private  int  database =, 0;      ,private  int  connectionPoolSize =, 64;      ,private  int  connectionMinimumIdleSize=10;      ,private  int  slaveConnectionPoolSize =, 250;      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在SpringBoot中利用Redisson实现一个分布式锁