实现Redis分布式锁(JAVA)

Redis分布式锁

定义 DistributedLockFactory接口

package com.demo.common.lock;

public interface DistributedLockFactory {
   
   

    DistributedLock createLock(String resource);
}

实现类 RedisFactory

package com.demo.common.lock.impl;

import com.demo.common.lock.DistributedLock;
import com.demo.common.lock.DistributedLockFactory;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;

public class RedisFactory implements DistributedLockFactory {
   
   

    private String host = "localhost";
    private int port = 6379;
    private int lockReleaseTime = 60 * 5;
    private int lockWatchdogTimeout = 0;
    private volatile JedisPool jedisPool;
    private volatile ScheduledExecutorService scheduledExecutorService;
    private volatile boolean isInit = false;

    @Override
    public DistributedLock createLock(String resource) {
   
   
        if (resource == null) {
   
   
            throw new NullPointerException("No lock resource specified.");
        }
        init();
        Redis redisLock = new Redis(resource);
        redisLock.setJedisPool(this.jedisPool);
        redisLock.setLockReleaseTime(this.lockReleaseTime);
        redisLock.setLockWatchdogTimeout(this.lockWatchdogTimeout);
        redisLock.setScheduledExecutorService(this.scheduledExecutorService);
        return redisLock;
    }

    private void init() {
   
   
        if (!isInit) {
   
   
            synchronized (this) {
   
   
                if (!isInit) {
   
   
                    if (jedisPool == null) {
   
   
                        jedisPool = new JedisPool(new JedisPoolConfig(), host, port);
                    }
                    scheduledExecutorService = new ScheduledThreadPoolExecutor(
                            Runtime.getRuntime().availableProcessors(), r -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ellis_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值