redission分布式锁测试

pom依赖

		<dependency>
			<groupId>org.redisson</groupId>
			<artifactId>redisson</artifactId>
			<version>3.8.2</version>
		</dependency>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

yml配置

在这里插入图片描述

public class RedissonManager {
    private static Config config = new Config();
    //声明redisso对象
    private static Redisson redisson = null;
    //实例化redisson
    static{
        //单个redis节点
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
//        //集群
//        config.useClusterServers();
//        //哨兵
//        config.useSentinelServers();
//        //主从
//        config.useMasterSlaveServers();
        //得到redisson对象
        redisson = (Redisson) Redisson.create(config);
    }

    //获取redisson对象的方法
    public static Redisson getRedisson(){
        return redisson;
    }
}

/**
 * 加锁,解锁,设置超时时间防止死锁
 */
public class DistributedRedisLock {
    /**
     * 从配置类中获取redisson对象
     */
    private static final Redisson redisson = RedissonManager.getRedisson();
    /**
     * 锁头
     */
    private static final String LOCK_TITLE = "redisLock_";

    /**
     * 加锁方法
     * @param lockName
     * @return
     */
    public static boolean acquire(String lockName){
        //声明key对象
        String key = LOCK_TITLE + lockName;
        //获取锁对象
        RLock mylock = redisson.getLock(key);
        //加锁,并且设置锁过期时间,防止死锁的产生
        mylock.lock(2, TimeUnit.MINUTES);
        System.err.println("======lock======"+Thread.currentThread().getName());
        //加锁成功
        return  true;
    }

    /**
     * 锁的释放
     * @param lockName
     */
    public static void release(String lockName){
        //必须是和加锁时的同一个key
        String key = LOCK_TITLE + lockName;
        //获取所对象
        RLock mylock = redisson.getLock(key);
        //释放锁(解锁)
        mylock.unlock();
        System.err.println("======unlock======"+Thread.currentThread().getName());
    }
}

    @RequestMapping("/redder")
    @ResponseBody
    public String redder() throws InterruptedException {
        for (int i = 0; i < 10; i++) {
            int finalI = i;
            new Thread(()->{
                String key = "test123";
                //加锁
                System.out.println("-------------------当前业务加锁-----------------"+ finalI);
                DistributedRedisLock.acquire(key);
                //执行具体业务逻辑
                System.out.println("--------------------业务处理完毕-------------------------"+finalI);
                //释放锁
                System.out.println("-----------------------释放锁--------------------"+finalI);
                DistributedRedisLock.release(key);
                //返回结果
            },"线程--:"+i).start();
            Thread.sleep(1000);
        }
        return "redis分布式锁测试成功";
    }

在这里插入图片描述
在这里插入图片描述

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页