package org.hsweb.concurrent.lock.support.redis;
import org.hsweb.concurrent.lock.support.DefaultLockFactory;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
/**
* Created by zhouhao on 16-5-27.
*/
public class RedisLockFactory extends DefaultLockFactory {
private RedisTemplate redisTemplate;
public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@Override
public ReadWriteLock createReadWriteLock(String key) {
synchronized (READ_WRITE_LOCK_BASE) {
ReadWriteLock readWriteLock = READ_WRITE_LOCK_BASE.get(key);
if (readWriteLock == null) {
readWriteLock = new RedisReadWriteLock(key, redisTemplate);
READ_WRITE_LOCK_BASE.put(key, readWriteLock);
}
return readWriteLock;
}
}
@Override
public Lock createLock(String key) {
synchronized (LOCK_BASE) {
Lock lock = LOCK_BASE.get(key);
if (lock == null) {
lock = new RedisLock(key, redisTemplate);
LOCK_BASE.put(key, lock);
}
return lock;
}
}
}