关于Redisson的基础概念,参照Redisson基础。
要想实现此功能需要以下几步:
1.依赖包
这里用的是jdk8+的版本
org.redisson
redisson
3.3.2
2.Spring整合
注意设置schema文件
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 RLockacquireLock(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 setSet(String name, String value){
RSet set = redisson.getSet(name);
set.add(value);
return set;
}
/**
* 检查分布式对象是否存在
* @param name
* @return
*/
public Boolean existSet(String name){
RSet set = redisson.getSet(name);
if (!set.isEmpty()) {
return true;
}
return false;
}
调用代码:
String lockname="lockname";
RLock fairLock=DistributedRedisLock.acquireLock(lockname); try {//不存在设置到redisif (!DistributedRedisLock.existSet(lockname)) {DistributedRedisLock.setSet(lockname, "1111");//业务逻辑begin} else {//redis中有则不处理业务逻辑}}finally {DistributedRedisLock.realeaseLock(fairLock);}