import org.apache.commons.lang3.StringUtils; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; import redis.clients.jedis.*; import java.io.IOException; import java.util.*; public class ClusterRedisHelper implements CacheDao { private static final Logger logger = LoggerFactory.getLogger(ClusterRedisHelper.class); private static final int DEFAULT_RETENTION = 7200; private JedisCluster jc; private List<String> clusterUrl; private String password; private String name; private int maxTotal; private int maxIdle; private long maxWait; public List<String> getClusterUrl() { return clusterUrl; } public void setClusterUrl(List<String> clusterUrl) { this.clusterUrl = clusterUrl; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMaxTotal() { return maxTotal; } public void setMaxTotal(int maxTotal) { this.maxTotal = maxTotal; } public int getMaxIdle() { return maxIdle; } public void setMaxIdle(int maxIdle) { this.maxIdle = maxIdle; } public long getMaxWait() { return maxWait; } public void setMaxWait(long maxWait) { this.maxWait = maxWait; } protected void init() { logger.debug("[{}] redis cluster init...", name); final Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); for (String server : clusterUrl) { String ip = ""; int port = 0; final String[] strArray = server.split(":"); if (strArray.length >= 2) { ip = strArray[0].trim(); port = Utils.getIntegerValue(strArray[1]); } jedisClusterNodes.add(new HostAndPort(ip, port)); logger.debug("[{}] add redis cluster node {}:{}", name, ip, port); } String pswd = null; if (StringUtils.isBlank(password)) { pswd = null; } else { if (password.trim().equalsIgnoreCase("null")) { pswd = null; } else { pswd = password.trim(); } } logger.debug("[{}] redis cluster use password {}", name, (pswd != null)); if (pswd == null) { jc = new JedisCluster(jedisClusterNodes, 2000, 20); } else { //"AakkFjWQ" JedisPoolConfig jedisPool = new JedisPoolConfig(); jedisPool.setMaxTotal(maxTotal); jedisPool.setMaxIdle(maxIdle); jedisPool.setMaxWaitMillis(maxWait); jc = new JedisCluster(jedisClusterNodes, 2000, 2000, 20, pswd, jedisPool); } logger.debug("[{}] redis cluster inited!!", name); } public void destroy() throws IOException { jc.close(); logger.debug("[{}] redis cluster destroied!!", name); } @Override public String get(Sc conf, String id) { if (logger.isTraceEnabled()) { logger.trace("IN get {},{}", conf, id); } String key = toKey(conf, id); String ret = jc.get(key); if (logger.isTraceEnabled()) { logger.trace("DONE get {}", ret); } return ret; }
}