分布式锁实现(基于redis)

锁是很多系统的基础服务,但是实现分布式环境的锁并不是简单的事情。还好现在各类组件齐全,今天我们介绍基于Redis的锁的Java实现-redssion。(基于Redis的setnx原生实现的分布式锁:http://blog.csdn.net/wwd0501/article/details/79472511)

1.安装redis

安装redssion的锁服务队redis的版本有要求,要求必须高于2.8版本,jdk 1.6+。关于redis的安装,这里不载描述。

2.redssion库

redssion的库添加的pom文件中去。

<dependency>
   <groupId>org.redisson</groupId>
   <artifactId>redisson</artifactId>
   <version>2.2.8</version>
</dependency>

3.测试例子

        Config config = new Config();
        config.useSingleServer().setAddress("ipaddress:6379");
        RedissonClient redisson = Redisson.create(config);
        
        RLock lock = redisson.getLock("testLock");
        try{
            //支持过期解锁功能,10秒钟以后自动解锁, 无需调用unlock方法手动解锁
            lock.lock(10,TimeUnit.SECONDS);
            System.out.println("test");
        } finally{
            lock.unlock();
            redisson.shutdown();
        }

注意:redisson使用后,一定要记得调用shutdown()方法关闭,然而在实际项目开发中调用shutdown方法,耗时2s多,故shutdown方法不能用于正式项目中,但是不调用shutdown方法关闭,一个请求一个连接,连接又不关闭,服务器连接资源很容易耗尽且处于假死状态,所以最好的方法实现redisson实例共享。方法如下:

import org.redisson.Config;
import org.redisson.Redisson;
import org.redisson.RedissonClient;
import org.redisson.core.RLock;

/**
 * 分布式锁工具类
 */
public class RLockUtil {

	public static RedissonClient redisson = null;
	
	static {
		Config config = new Config();
		config.useSingleServer().setAddress("ipaddress:port");
		redisson = Redisson.create(config);
	}
	
	public static RLock getLock(String lockName) {
		RLock lock = null;
		if(redisson != null) {
			lock = redisson.getLock(lockName);
		}	
		return lock;
	}
	
}

redisson原文地址:https://github.com/mrniko/redisson

redisson部分资料翻译地址:http://ifeve.com/redis-lock/

参考文章:https://www.jianshu.com/p/cde0700f0128


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值