package com.util.redis;
import com.google.common.collect.Sets;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;
import redis.clients.util.Pool;
import java.util.List;
public class RedisUtil {
private static Logger logger = LoggerFactory.getLogger(RedisUtil.class);
private static volatile Pool jedisPool;
private static final String SINGLE = "single";
private static final String SENTINEL = "sentinel";
public static void init(ConfigProperties configProperties) {
if (jedisPool == null) {
synchronized (RedisUtil.class) {
if (jedisPool == null) {
jedisPool = initPool(configProperties);
}
}
}
if (jedisPool == null) {
throw new RuntimeException("JedisPool 初始化失败");
}
}
public static Pool getInstance() {
if (jedisPool == null) {
throw new RuntimeException("JedisPool 没有初始化 ");
}
return jedisPool;
}
public static Jedis getJedis() {
return getInstance().getResource();
}
private static Pool initPool(ConfigProperties configProperties) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(configProperties.getMaxTotal());
config.setMaxIdle(configProperties.getMaxIdle());
config.setMaxWaitMillis(configProperties.getMaxWaitMillis());
//在获取连接的时候检查有效性,
//config.setTestonBorrow(true);
//在空闲时检查有效性, 默认false
//config.setTestWhileIdle(true);
if (CollectionUtils.isEmpty(configProperties.getHosts())) {
logger.error("redis {} init failed, nodes not configured", configProperties.getType());
return null;
}
if (SINGLE.equals(configProperties.getType())) {
return new JedisPool(config, configProperties.getHosts().get(0),
configProperties.getPort(), configProperties.getTimeout(),
configProperties.getPassword(), configProperties.getDatabase()
return null;
}
@Data
public static class ConfigProperties {
private String type;
private int maxTotal = 8;
private int maxIdle = 8;
private long maxWaitMillis = -1L;
private List hosts;
private int port;
private String password;
private String masterName;
private int timeout = 2000;
private int database;
}
private RedisUtil() {
}