**redis分布式锁**

redis分布式锁

直接上代码,我写了四个redis分布式锁的方法,大家可以提个意见:
第一种方法:
/**
* redis分布式锁
* @param timeout
*/
public void lock(long timeout) {
long nano = System.nanoTime();
timeout *= 1000000;
try {
while ((System.nanoTime() - nano) < timeout) {
if (this.setnx(key, LOCKED) == 1) {
System.out.println(“add lock ” + key);
this.expire(key, EXPIRE);
locked = true;
break;
}
Thread.sleep(100);
}
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void lock() {
    lock(TIME_OUT);
}

public void lock(String key) {
    this.key = key;
    lock();
}
@Override
public void unlock() {
    if (locked) {
        System.out.println("release lock");
        this.del(key);
    }
}

public void unlock(String key) {
    this.key = key;
    unlock();
}

第二种方法:
/**
* 添加分布式锁
* @param lock
* @return
*/
public boolean acquireLock(String lock) {
//通过SETNX试图获取一个lock
boolean success = false;
Jedis jedis = null;
long value = System.currentTimeMillis() + EXPIRE + 1;
//System.out.println(value);

    try {
        jedis = getPool();
        long acquired = jedis.setnx(lock, String.valueOf(value));
        //SETNX成功,则成功获取一个锁
        if (acquired == 1) {
            success = true;
            //SETNX失败,说明锁仍然被其他对象保持,检查其是否已经超时
        }else {
            long oldValue = Long.valueOf(jedis.get(lock));
            //超时
            if (oldValue < System.currentTimeMillis()) {
                String getValue = jedis.getSet(lock, String.valueOf(value));
                // 获取锁成功
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值