复用代码系列:简单Redis分布式锁(基于Redisson)

复用代码系列目录

Redisson配置

package com.redis.lock.redisson;

import org.redisson.Redisson;
import org.redisson.api.RAtomicLong;  
import org.redisson.config.Config;  
  
public class RedissonManager {  
  
    private static final String RAtomicName = "genId_";  
  
    private static Config config = new Config();  
    private static Redisson redisson = null;  
  
   public static void init(String key,String value){  
        try {  
/*            config.useClusterServers() //这是用的集群server 
                    .setScanInterval(2000) //设置集群状态扫描时间 
                    .setMasterConnectionPoolSize(10000) //设置连接数 
                    .setSlaveConnectionPoolSize(10000) 
                    .addNodeAddress("127.0.0.1:6379");*/  
            if(key==null || "".equals(key)){  
                key=RAtomicName;  
            }  
            config.useSingleServer().setAddress("127.0.0.1:6379");  
            redisson = (Redisson) Redisson.create(config);  
            //清空自增的ID数字  
            RAtomicLong atomicLong = redisson.getAtomicLong(key);  
            long pValue=1;  
            if(value!=null && !"".equals(value)){  
                pValue = Long.parseLong(value);  
            }  
            atomicLong.set(pValue);  
        }catch (Exception e){  
            e.printStackTrace();  
        }  
    }  
  
    public static Redisson getRedisson(){  
        return redisson;  
    }  
  
    /** 获取redis中的原子ID */  
    public static Long nextID(){  
        RAtomicLong atomicLong = getRedisson().getAtomicLong(RAtomicName);  
       //原子性的获取下一个ID,递增1   
       atomicLong.incrementAndGet();  
        return atomicLong.get();  
    }  
}  

分布式锁:

package com.redis.lock.redisson;

import org.redisson.Redisson;
import org.redisson.api.RLock;

import java.util.concurrent.TimeUnit;

public class DistributedRedisLock {
    private static Redisson redisson = RedissonManager.getRedisson();
    private static final String LOCK_TITLE = "redisLock_";  
  
    public static boolean acquire(String lockName){  
        String key = LOCK_TITLE + lockName;  
        RLock mylock = redisson.getLock(key);
        mylock.lock(2, TimeUnit.MINUTES); //lock提供带timeout参数,timeout结束强制解锁,防止死锁
        System.err.println("======lock======"+Thread.currentThread().getName());  
        return  true;  
    }  
  
    public static void release(String lockName){  
        String key = LOCK_TITLE + lockName;  
        RLock mylock = redisson.getLock(key);
        mylock.unlock();  
        System.err.println("======unlock======"+Thread.currentThread().getName());  
    }  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值