您的位置:首页 > 数据库 > Redis

分布式锁实现(基于redis)

2016-02-22 16:16 806 查看
锁是很多系统的基础服务,但是实现分布式环境的锁并不是简单的事情。还好现在各类组件齐全,今天我们介绍基于Redis的锁的Java实现-redssion。


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{
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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: