我是靠谱客的博主 壮观小蝴蝶,最近开发中收集的这篇文章主要介绍利用Redisson实现分布式锁,并防止重复提交1.依赖包2.Spring整合3.工具类,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
关于Redisson的基础概念,参照Redisson基础。
要想实现此功能需要以下几步:
1.依赖包
这里用的是jdk8+的版本
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.3.2</version>
</dependency>
2.Spring整合
注意设置schema文件
<redisson:client id="redissonClient2">
<redisson:single-server address="192.168.238.129:6379"/>
</redisson:client>
3.工具类
默认锁
@Component
public class DistributedRedisLock implements InitializingBean {
private static final Logger _log = Logger.getLogger(DistributedRedisLock.class);
@Autowired
private RedissonClient redissonClient;
public static Redisson redisson;
/**
* 获取默认锁
*/
public static RLock acquireLock(String lockName) {
RLock fairLock = redisson.getLock(lockName);
fairLock.lock();// 手动去解锁
_log.info("锁 - " + lockName + "获取成功"); return fairLock;
}
/**
* 释放默认锁
*/
public static void realeaseLock(RLock fairLock) {
fairLock.unlock();
}
@Override
public void afterPropertiesSet() throws Exception {
redisson = (Redisson) redissonClient;
_log.info(redisson.getConfig().toJSON());
}
}
如何防止重复呢?
/**
* 存入分布式set对象中
* @param name
* @param value
* @return
*/
public RSet<String> setSet(String name, String value){
RSet<String> set = redisson.getSet(name);
set.add(value);
return set;
}
/**
* 检查分布式对象是否存在
* @param name
* @return
*/
public Boolean existSet(String name){
RSet<String> set = redisson.getSet(name);
if (!set.isEmpty()) {
return true;
}
return false;
}
调用代码:
String lockname="lockname";
RLock fairLock=DistributedRedisLock.acquireLock(lockname);
try {//不存在设置到redis
if (!DistributedRedisLock.existSet(lockname)) {
DistributedRedisLock.setSet(lockname, "1111");
//业务逻辑begin
} else {
//redis中有则不处理业务逻辑
}
}finally {
DistributedRedisLock.realeaseLock(fairLock);
}
最后
以上就是壮观小蝴蝶为你收集整理的利用Redisson实现分布式锁,并防止重复提交1.依赖包2.Spring整合3.工具类的全部内容,希望文章能够帮你解决利用Redisson实现分布式锁,并防止重复提交1.依赖包2.Spring整合3.工具类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复