package com.jarvis.cache.lock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class ShardedJedisLock extends AbstractRedisLock {
private static final Logger logger=LoggerFactory.getLogger(ShardedJedisLock.class);
private ShardedJedisPool shardedJedisPool;
public ShardedJedisLock(ShardedJedisPool shardedJedisPool) {
this.shardedJedisPool=shardedJedisPool;
}
private void returnResource(ShardedJedis shardedJedis) {
shardedJedis.close();
}
@Override
protected Long setnx(String key, String val) {
ShardedJedis shardedJedis=null;
try {
shardedJedis=shardedJedisPool.getResource();
Jedis jedis=shardedJedis.getShard(key);
return jedis.setnx(key, val);
} catch(Exception ex) {
logger.error(ex.getMessage(), ex);
} finally {
returnResource(shardedJedis);
}
return 0L;
}
@Override
protected void expire(String key, int expire) {
ShardedJedis shardedJedis=null;
try {
shardedJedis=shardedJedisPool.getResource();
Jedis jedis=shardedJedis.getShard(key);
jedis.expire(key, expire);
} catch(Exception ex) {
logger.error(ex.getMessage(), ex);
} finally {
returnResource(shardedJedis);
}
}
@Override
protected String get(String key) {
ShardedJedis shardedJedis=null;
try {
shardedJedis=shardedJedisPool.getResource();
Jedis jedis=shardedJedis.getShard(key);
return jedis.get(key);
} finally {
returnResource(shardedJedis);
}
}
@Override
protected String getSet(String key, String newVal) {
ShardedJedis shardedJedis=null;
try {
shardedJedis=shardedJedisPool.getResource();
Jedis jedis=shardedJedis.getShard(key);
return jedis.getSet(key, newVal);
} finally {
returnResource(shardedJedis);
}
}
@Override
protected void del(String key) {
ShardedJedis shardedJedis=null;
try {
shardedJedis=shardedJedisPool.getResource();
Jedis jedis=shardedJedis.getShard(key);
jedis.del(key);
} finally {
returnResource(shardedJedis);
}
}
}