redisson的锁的类型_利用Redisson实现分布式锁,并防止重复提交

关于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);}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值