代码如下:
package cn.cslp.ilea.distribute.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Transaction;
public class RedisUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(RedisUtil.class);
private static final String SUCCESS_OK = "OK";
private static final Long SUCCESS_STATUS_LONG = 1L;
// SET IF NOT EXIST,即当key不存在时,我们进行set操作;若key已经存在,则不做任何操作
private static final String SET_IF_NOT_EXIST = "NX";
// 给key加一个过期的设置,具体时间由第五个参数决定
private static final String SET_WITH_EXPIRE_TIME = "PX";
// jedis server url
public static final String JEDIS_HOST_URL = PropertyUtil.getPropertyByName("JEDIS_HOST_URL");
// jedis server port
public static final int JEDIS_HOST_PORT = Integer.parseInt(PropertyUtil.getPropertyByName("JEDIS_HOST_PORT"));
// jedis server paw
public static final String JEDIS_HOST_PASSWD = PropertyUtil.getPropertyByName("JEDIS_HOST_PASSWD");
// jedis max active connection
public static final int JEDIS_MAX_ACTIVE = Integer.parseInt(PropertyUtil.getPropertyByName("JEDIS_MAX_ACTIVE"));
// jedis max idle comnnection
public static final int JEDIS_MAX_IDLE = Integer.parseInt(PropertyUtil.getPropertyByName("JEDIS_MAX_IDLE"));
// jedis pool
public static JedisPool pool = null;
public static JedisPool getJedisPool() {
if (pool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(JEDIS_MAX_IDLE);
config.setTestOnBorrow(true);
pool = new JedisPool(config, JEDIS_HOST_URL, JEDIS_HOST_PORT, 0, JEDIS_HOST_PASSWD);
}
return pool;
}
/**
* 获取有序set
* @param key
* @return
*/
public static Set<String> getAllSortSet(String key) {
Set<String> ret = null;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.zrange(key, 0, -1);
} catch (Exception e) {
LOGGER.error("redis getAllSortSet 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 有序set
* @param key
* @param start
* @param end
* @return
*/
public static Set<String> getSortSet(String key,Integer start,Integer end) {
Set<String> ret = null;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.zrange(key, start, end);
} catch (Exception e) {
LOGGER.error("redis getSortSet 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 有序set set
* @param key
* @param start
* @param end
* @return
*/
public static boolean setSortSet(String key,Integer score,String member) {
boolean ret = false;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
Long status = jedis.zadd(key, score, member);
if(SUCCESS_STATUS_LONG == status) {
ret = true;
}
} catch (Exception e) {
LOGGER.error("redis getSortSet 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 获取无序set
* @param key
* @return
*/
public static Set<String> getSet(String key) {
Set<String> ret = null;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.smembers(key);
} catch (Exception e) {
LOGGER.error("redis getSet 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 获取List
* @param key
* @return
*/
public static List<String> getAllList(String key) {
List<String> ret = null;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.lrange(key, 0, -1);
} catch (Exception e) {
LOGGER.error("redis getAllList 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 获取List
* @param key
* @return
*/
public static List<String> getAllList(String key,Integer start,Integer end) {
List<String> ret = null;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.lrange(key, start, end);
} catch (Exception e) {
LOGGER.error("redis getAllList 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 添加List
* @param key
* @return
*/
public static boolean addInList(String key,String value) {
boolean ret = false;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
Long status = jedis.rpush(key, value);
if(SUCCESS_STATUS_LONG == status) {
ret = true;
}
} catch (Exception e) {
LOGGER.error("redis addInList 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* 判断是否在set集合里存在
* @param key
* @param member
* @return
*/
public static boolean sismenber(String key,String member) {
boolean ret = false;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.sismember(key, member);
} catch (Exception e) {
LOGGER.error("redis sismenber 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* set集合的add
* @param key
* @param member
* @return
*/
public static boolean sadd(String key,String member) {
boolean ret = false;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
Long status = jedis.sadd(key, member);
if(SUCCESS_STATUS_LONG == status) {
ret = true;
}
} catch (Exception e) {
LOGGER.error("redis sadd 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* set集合的size
* @param key
* @param member
* @return
*/
public static Long scard(String key) {
Long ret = 0L;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
ret = jedis.scard(key);
} catch (Exception e) {
LOGGER.error("redis scard 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
/**
* set(key1,value1) && sadd(key2,value2)
* @param key1
* @param value1
* @param key2
* @param value2
* @return
*/
public static boolean setAndSaddTransaction(String key1,String value1,String key2,String value2) {
boolean ret = false;
Jedis jedis = null;
try {
jedis = getJedisPool().getResource();
if (jedis == null) {
return ret;
}
Transaction tr =jedis.multi();
tr.set(key1, value1);
tr.sadd(key2,value2);
List<Object> list = tr.exec();
if(list.get(0).equals(SUCCESS_OK) && list.get(1) == SUCCESS_STATUS_LONG) {
ret = true;
}else{
jedis.del(key1);
jedis.srem(key2, value2);
}
} catch (Exception e) {
LOGGER.error("redis adapterAndTerminal 出错", e);
pool.returnBrokenResource(jedis);
} finally {
if (null != jedis) {
pool.returnResource(jedis);
}
}
return ret;
}
}