分布式锁实现(基于redis)
2016-02-22 16:16
806 查看
锁是很多系统的基础服务,但是实现分布式环境的锁并不是简单的事情。还好现在各类组件齐全,今天我们介绍基于Redis的锁的Java实现-redssion。
安装redssion的锁服务队redis的版本有要求,要求必须高于2.8版本,jdk
1.6+。关于redis的安装,这里不载描述。
redssion的库添加的pom文件中去。
注意:redisson使用后,一定要记得调用shutdown()方法关闭,然而在实际项目开发中调用shutdown方法,耗时2s多,故shutdown方法不能用于正式项目中,但是不调用shutdown方法关闭,一个请求一个连接,连接又不关闭,服务器连接资源很容易耗尽且处于假死状态,所以最好的方法实现redisson实例共享。方法如下:
redisson原文地址:https://github.com/mrniko/redisson
redisson部分资料翻译地址:http://ifeve.com/redis-lock/
1.安装redis
安装redssion的锁服务队redis的版本有要求,要求必须高于2.8版本,jdk1.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/
相关文章推荐
- redis 集群
- 一些php操作redis常用方法代码
- Redis (1) —— 安装
- redis 4000
- PHP安装PHPRedis扩展
- java 对redis 总结
- windows下安装redis
- 第八章 Redis数据库结构与读写原理
- 第九章 Redis过期策略
- redis安装部署
- Redis实现简单消息队列
- Redis 初
- 面试题之redis实现限制1小时内每用户Id最多只能登录5次
- 阿里云、青云、腾讯云服务器,Mysql数据库,Redis等产品性能对比
- .Net下Redis使用注意事项
- 3. redis的超时,事务,watch
- redis 学习
- golang--Redis最佳的Go语言驱动
- redis--使用redis-rdb-tools分析redis的内存使用情况
- 在java中使用redis