redis做分布式锁 java demo
来源:互联网 发布:软件培训ppt模板 编辑:程序博客网 时间:2024/05/17 08:06
package lockUtil;
import java.util.concurrent.TimeUnit;
public class RedisLock {
private static final String LOCK_KEY = "lock_key";
private static final long EXPIRE_TIME = 1000;
public boolean tryLock(String subkey,long timeout,TimeUnit unit){
//
// String key=LOCK_KEY+subkey;
// try{
// Jedis jedis=null;
// try{
// jedis=getConnection();
// if(jedis==null){
// return Boolean.FALSE;
// }
// }
//
// long nano=System.nanoTime();
//
// do{
// long i=jedis.setNX(key,key);
//
// if(i==1){
// jedis.expire(key,EXPIRE_TIME);
// return Boolean.TRUE;
// }else{
// //锁已经被占了
// String desc=jedis.get(key);
// logger.debug("key:"+key+"locked by another bussiness:"+desc);
// }
//
// if(timeout==0){//取不到锁时,不等待直接返回
// break;
// }
// Thread.sleep(200);
//
// }while((System.nanoTime()-nano)<unit.toNanos(timeout));
// return Boolean.FALSE;
// }catch(Exception e){
// e.printStackTrace();
// }
return Boolean.FALSE;
}
/**
*
* @Method: lock
* @Description: 如果锁空闲立即返回,获取失败,一直等待
* @param subKey
* @return boolean (返回类型描述)
* @throws
* @author : wangshuai
* @CreateDate : 2017年6月19日 下午4:48:09
*/
public boolean lock(String subKey){
String key=LOCK_KEY+subKey;
Jedis jedis=null;
boolean isLock=false;
try{
jedis=getConnection();
if(jedis==null){
return isLock;
}
while(true){
long i=jedis.setNX(key,key);
if(i==1){
jedis.expire(key,EXPIRE_TIME);
isLock=true;
}else{//存在锁
String desc=jedis.get(key);
logger.debug("key:"+key+"locked bu another business"+desc);
isLock=false;
}
Thread.sleep(500);
}
}catch(Exception e){
e.printStackTrace();
return isLock;
}
return isLock;
}
/*释放锁*/
public void unlock(Sting subKey){
String key = LOCK_KEY + subKey;
Jedis jedis = null;
try {
jedis = getConnection();
if (jedis == null) {
return;
}
jedis.del(key);
logger.debug("release lock, keys :" + key);
} catch (JedisConnectionException je) {
logger.error(je.getMessage(), je);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.util.concurrent.TimeUnit;
public class RedisLock {
private static final String LOCK_KEY = "lock_key";
private static final long EXPIRE_TIME = 1000;
public boolean tryLock(String subkey,long timeout,TimeUnit unit){
//
// String key=LOCK_KEY+subkey;
// try{
// Jedis jedis=null;
// try{
// jedis=getConnection();
// if(jedis==null){
// return Boolean.FALSE;
// }
// }
//
// long nano=System.nanoTime();
//
// do{
// long i=jedis.setNX(key,key);
//
// if(i==1){
// jedis.expire(key,EXPIRE_TIME);
// return Boolean.TRUE;
// }else{
// //锁已经被占了
// String desc=jedis.get(key);
// logger.debug("key:"+key+"locked by another bussiness:"+desc);
// }
//
// if(timeout==0){//取不到锁时,不等待直接返回
// break;
// }
// Thread.sleep(200);
//
// }while((System.nanoTime()-nano)<unit.toNanos(timeout));
// return Boolean.FALSE;
// }catch(Exception e){
// e.printStackTrace();
// }
return Boolean.FALSE;
}
/**
*
* @Method: lock
* @Description: 如果锁空闲立即返回,获取失败,一直等待
* @param subKey
* @return boolean (返回类型描述)
* @throws
* @author : wangshuai
* @CreateDate : 2017年6月19日 下午4:48:09
*/
public boolean lock(String subKey){
String key=LOCK_KEY+subKey;
Jedis jedis=null;
boolean isLock=false;
try{
jedis=getConnection();
if(jedis==null){
return isLock;
}
while(true){
long i=jedis.setNX(key,key);
if(i==1){
jedis.expire(key,EXPIRE_TIME);
isLock=true;
}else{//存在锁
String desc=jedis.get(key);
logger.debug("key:"+key+"locked bu another business"+desc);
isLock=false;
}
Thread.sleep(500);
}
}catch(Exception e){
e.printStackTrace();
return isLock;
}
return isLock;
}
/*释放锁*/
public void unlock(Sting subKey){
String key = LOCK_KEY + subKey;
Jedis jedis = null;
try {
jedis = getConnection();
if (jedis == null) {
return;
}
jedis.del(key);
logger.debug("release lock, keys :" + key);
} catch (JedisConnectionException je) {
logger.error(je.getMessage(), je);
} catch (Exception e) {
e.printStackTrace();
}
}
}
阅读全文
0 0
- redis做分布式锁 java demo
- 关于Redis做分布式事务的java Demo
- Redis分布式锁Java实现
- Redis分布式锁java实现
- redis做缓存的demo
- Redis java demo
- Java redis Demo MicroproduceOrder
- java代码实现redis分布式锁代码
- Redis分布式锁实现原理 java版
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java实现基于Redis的分布式锁
- Java使用Redis实现分布式锁
- java使用redis实现分布式锁
- java结合redis实现分布式锁
- java实现redis分布式锁实例
- Java实现基于Redis的分布式锁
- jmap,jhat,jstat
- Nginx开发从入门到精通
- Unity StartCoroutine 和 yield return 深入研究
- python中递归的使用
- 同步失败阿里云代理
- redis做分布式锁 java demo
- 移动站点网页设计如何打造才能更好的吸引客户呢
- salt-api 安装使用
- PAT乙级真题及训练集(11)--1004. 成绩排名 (20)
- java中 String.format与StringBuilder、String+的比较
- Java中遍历Map的四种方法
- 线程
- 找工作时如何快速了解一家公司?
- Mybatis <foreach>标签