package net.csdn.modules.cache;
/**
* BlogInfo: WilliamZhu
* Date: 12-6-28
* Time: 上午7:33
*/
import com.google.inject.Inject;
import net.csdn.common.exception.SettingsException;
import net.csdn.common.settings.Settings;
import net.csdn.modules.compress.gzip.GZip;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class RedisClient {
private JedisPool pool;
@Inject
public RedisClient(Settings settings) {
try {
pool = new JedisPool(new JedisPoolConfig(), settings.get("redis.host"), settings.getAsInt("redis.port", 6379));
} catch (SettingsException e) {
// ignore
}
}
public interface Callback {
public void execute(Jedis jedis);
}
public void operate(Callback callback) {
Jedis jedis = borrow();
try {
callback.execute(jedis);
} finally {
revert(jedis);
}
}
public String get(String key) {
Jedis jedis = borrow();
try {
return jedis.get(key);
} finally {
revert(jedis);
}
}
public String bGet(String key) {
Jedis jedis = borrow();
try {
byte[] value = jedis.get(key.getBytes());
if (value != null) return GZip.decodeWithGZip(value);
return null;
} finally {
revert(jedis);
}
}
public String set(String key, String value) {
Jedis jedis = borrow();
try {
return jedis.set(key, value);
} finally {
revert(jedis);
}
}
public void del(String key) {
Jedis jedis = borrow();
try {
jedis.del(key);
} finally {
revert(jedis);
}
}
public String bSet(String key, String value) {
Jedis jedis = borrow();
try {
return jedis.set(key.getBytes(), GZip.encodeWithGZip(value));
} finally {
revert(jedis);
}
}
public boolean exits(String key) {
Jedis jedis = borrow();
try {
return jedis.exists(key);
} finally {
revert(jedis);
}
}
public List<String> mget(String[] keys) {
Jedis jedis = borrow();
try {
return jedis.mget(keys);
} finally {
revert(jedis);
}
}
public String info() {
Jedis jedis = borrow();
try {
return jedis.info();
} finally {
revert(jedis);
}
}
public List<String> bMget(String[] keys) {
Jedis jedis = borrow();
int len = keys.length;
byte[][] bkeys = new byte[len][];
for (int i = 0; i < keys.length; i++) {
bkeys[i] = keys[i].getBytes();
}
try {
List<byte[]> list = jedis.mget(bkeys);
List<String> temp_list = new ArrayList<String>(list.size());
for (byte[] temp : list) {
temp_list.add(GZip.decodeWithGZip(temp));
}
return temp_list;
} finally {
revert(jedis);
}
}
public Set<String> sCopy(String key, String new_key) {
Jedis jedis = borrow();
try {
Set<String> oldSets = jedis.smembers(key);
for (String str : oldSets) {
jedis.sadd(new_key, str);
}
return oldSets;
} finally {
revert(jedis);
}
}
public void sClear(String key, String oldKey) {
Jedis jedis = borrow();
try {
Set<String> oldSets = jedis.smembers(key);
for (String str : oldSets) {
jedis.del(oldKey + ":" + str);
}
jedis.del(key);
} finally {
revert(jedis);
}
}
public Set<String> sMove(String key, String new_key) {
Jedis jedis = borrow();
try {
Set<String> oldSets = jedis.smembers(key);
for (String str : oldSets) {
jedis.smove(key, new_key, str);
}
return oldSets;
} finally {
revert(jedis);
}
}
public void destory() {
pool.destroy();
}
public Jedis borrow() {
return pool.getResource();
}
public void revert(Jedis jedis) {
pool.returnResource(jedis);
}
}