介绍
这篇文章给大家介绍怎么在SpringBoot中利用Redisson实现一个分布式锁,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
项目代码结构图:
& 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实现一个分布式锁