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 -