package com.sohu.cache.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by hym on 14-11-3.
*/
public class DemoCodeUtil {
public static final List<String> redisCluster = new ArrayList<String>();
public static final List<String> redisSentinel = new ArrayList<String>();
public static final List<String> redisStandalone = new ArrayList<String>();
public static final List<String> redisSentinelSpring = new ArrayList<String>();
public static final List<String> redisClusterSpring = new ArrayList<String>();
private static final String springAppId = "${your appId}";
static {
redisCluster.add("/** ");
redisCluster.add(" * 使用自定义配置: ");
redisCluster.add(" * 1. setTimeout:redis操作的超时设置; ");
redisCluster.add(" * 2. setMaxRedirections:节点定位重试的次数; ");
redisCluster.add(" */ ");
redisCluster.add("GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); ");
redisCluster.add("JedisCluster redisCluster = ClientBuilder.redisCluster(appId) ");
redisCluster.add(" .setJedisPoolConfig(poolConfig) ");
redisCluster.add(" .setConnectionTimeout(1000) ");
redisCluster.add(" .setSoTimeout(1000) ");
redisCluster.add(" .setMaxRedirections(5) ");
redisCluster.add(" .build(); ");
redisCluster.add("//1.字符串value");
redisCluster.add("redisCluster.set(\"key1\", \"value1\"); ");
redisCluster.add("System.out.println(redisCluster.get(\"key1\")); ");
redisSentinel.add("/** ");
redisSentinel.add(" * 自定义配置 ");
redisSentinel.add(" */ ");
redisSentinel.add("GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); ");
redisSentinel.add("JedisSentinelPool sentinelPool = ClientBuilder.redisSentinel(appId) ");
redisSentinel.add(" .setConnectionTimeout(1000) ");
redisSentinel.add(" .setSoTimeout(1000) ");
redisSentinel.add(" .setPoolConfig(poolConfig) ");
redisSentinel.add(" .build(); ");
redisSentinel.add("Jedis jedis = null; ");
redisSentinel.add("try { ");
redisSentinel.add(" jedis = sentinelPool.getResource(); ");
redisSentinel.add(" System.out.println(jedis.get(\"key1\")); ");
redisSentinel.add(" //1.字符串value ");
redisSentinel.add(" jedis.set(\"key1\", \"1\"); ");
redisSentinel.add("  ");
redisSentinel.add("} catch (Exception e) { ");
redisSentinel.add(" e.printStackTrace(); ");
redisSentinel.add("} finally { ");
redisSentinel.add(" if(jedis!=null) ");
redisSentinel.add(" jedis.close(); ");
redisSentinel.add("} ");
redisStandalone.add("// 使用默认配置 ");
redisStandalone.add("//jedisPool = ClientBuilder.redisStandalone(appId).build(); ");
redisStandalone.add("/** ");
redisStandalone.add(" * 使用自定义配置 ");
redisStandalone.add(" */ ");
redisStandalone.add("GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); ");
redisStandalone.add("JedisPool jedisPool = ClientBuilder.redisStandalone(appId) ");
redisStandalone.add(" .setTimeout(2000) ");
redisStandalone.add(" .setPoolConfig(poolConfig) ");
redisStandalone.add(" .build(); ");
redisStandalone.add("Jedis jedis = null; ");
redisStandalone.add("try { ");
redisStandalone.add(" jedis = jedisPool.getResource(); ");
redisStandalone.add(" jedis.set(\"key1\", \"1\"); ");
redisStandalone.add(" System.out.println(jedis.get(\"key1\")); ");
redisStandalone.add("  ");
redisStandalone.add("} catch (Exception e) { ");
redisStandalone.add(" e.printStackTrace(); ");
redisStandalone.add("} finally { ");
redisStandalone.add(" if(jedis!=null) ");
redisStandalone.add(" jedis.close(); ");
redisStandalone.add("} ");
//redis-sentinel的spring配置
redisSentinelSpring.add("//spring 配置");
redisSentinelSpring.add("<bean id=\"redisSentinelFactory\" class=\"com.sohu.tv.mobil.common.data.RedisSentinelFactory\" init-method=\"init\">");
redisSentinelSpring.add(" <property name=\"appId\" value=\""+springAppId+"\"/>");
redisSentinelSpring.add("</bean>");
redisSentinelSpring.add("<bean id=\"redisSentinelPool\" factory-bean=\"redisSentinelFactory\" factory-method=\"getJedisSentinelPool\"/>");
redisSentinelSpring.add("<!--高效的序列化工具--/>");
redisSentinelSpring.add("<bean id=\"protostuffSerializer\" class=\"redis.clients.jedis.serializable.ProtostuffSerializer\"/>");
redisSentinelSpring.add("");
redisSentinelSpring.add("package xx.xx;");
redisSentinelSpring.add("import com.sohu.tv.builder.ClientBuilder;");
redisSentinelSpring.add("import org.apache.commons.pool2.impl.GenericObjectPoolConfig;");
redisSentinelSpring.add("import org.slf4j.Logger;");
redisSentinelSpring.add("import org.slf4j.LoggerFactory;");
redisSentinelSpring.add("import redis.clients.jedis.JedisSentinelPool;");
redisSentinelSpring.add("public class RedisSentinelFactory {");
redisSentinelSpring.add("");
redisSentinelSpring.add(" private final Logger logger = LoggerFactory.getLogger(this.getClass());");
redisSentinelSpring.add("");
redisSentinelSpring.add(" private JedisSentinelPool jedisSentinelPool;");
redisSentinelSpring.add("");
redisSentinelSpring.add(" private int appId;");
redisSentinelSpring.add("");
redisSentinelSpring.add(" public void init(){");
redisSentinelSpring.add(" //根据自己需要设置poolConfig");
redisSentinelSpring.add(" GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();");
redisSentinelSpring.add(" poolConfig.setMaxTotal(GenericObjectPoolConfig.DEFAULT_MAX_TOTAL * 10);");
redisSentinelSpring.add(" poolConfig.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE * 5);");
redisSentinelSpring.add(" poolConfig.setMinIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE * 2);");
redisSentinelSpring.add(" poolConfig.setMaxWaitMillis(1000L);");
redisSentinelSpring.add(" poolConfig.setJmxEnabled(true);");
redisSentinelSpring.add(" try {");
redisSentinelSpring.add(" //根据自己需要设置超时时间");
redisSentinelSpring.add(" jedisSentinelPool = ClientBuilder.redisSentinel(appId)");
redisSentinelSpring.add(" .setTimeout(2000)");
redisSentinelSpring.add(" .setPoolConfig(poolConfig)");
redisSentinelSpring.add(" .build();");
redisSentinelSpring.add(" } catch (Exception e) {");
redisSentinelSpring.add(" logger.error(e.getMessage(), e);");
redisSentinelSpring.add(" }");
redisSentinelSpring.add(" }");
redisSentinelSpring.add("");
redisSentinelSpring.add(" public JedisSentinelPool getJedisSentinelPool() {");
redisSentinelSpring.add(" return jedisSentinelPool;");
redisSentinelSpring.add(" }");
redisSentinelSpring.add("");
redisSentinelSpring.add(" public void setAppId(int appId) {");
redisSentinelSpring.add(" this.appId = appId;");
redisSentinelSpring.add(" }");
redisSentinelSpring.add("}");
// redis-cluster的spring配置
redisClusterSpring.add("//spring 配置");
redisClusterSpring.add("<bean id=\"redisClusterFactory\" class=\"xx.xx.RedisClusterFactory\" init-method=\"init\">");
redisClusterSpring.add(" <property name=\"appId\" value=\""+springAppId+"\"/>");
redisClusterSpring.add("</bean>");
redisClusterSpring.add("<bean id=\"redisCluster\" factory-bean=\"redisClusterFactory\" factory-method=\"getRedisCluster\"/>");
redisClusterSpring.add("<!--高效的序列化工具--/>");
redisClusterSpring.add("<bean id=\"protostuffSerializer\" class=\"redis.clients.jedis.serializable.ProtostuffSerializer\"/>");
redisClusterSpring.add("");
redisClusterSpring.add("package xx.xx;");
redisClusterSpring.add("import com.sohu.tv.builder.ClientBuilder;");
redisClusterSpring.add("import org.apache.commons.pool2.impl.GenericObjectPoolConfig;");
redisClusterSpring.add("import org.slf4j.Logger;");
redisClusterSpring.add("import org.slf4j.LoggerFactory;");
redisClusterSpring.add("import redis.clients.jedis.PipelineCluster;");
redisClusterSpring.add("public class RedisClusterFactory {");
redisClusterSpring.add("");
redisClusterSpring.add(" private final Logger logger = LoggerFactory.getLogger(this.getClass());");
redisClusterSpring.add("");
redisClusterSpring.add(" private PipelineCluster redisCluster;");
redisClusterSpring.add("");
redisClusterSpring.add(" private int appId;");
redisClusterSpring.add("");
redisClusterSpring.add(" public void init() {");
redisClusterSpring.add(" //根据自己需要设置poolConfig");
redisClusterSpring.add(" GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();");
redisClusterSpring.add(" poolConfig.setMaxTotal(GenericObjectPoolConfig.DEFAULT_MAX_TOTAL * 10);");
redisClusterSpring.add(" poolConfig.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE * 5);");
redisClusterSpring.add(" poolConfig.setMinIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE * 2);");
redisClusterSpring.add(" poolConfig.setMaxWaitMillis(1000L);");
redisClusterSpring.add(" poolConfig.setJmxEnabled(true);");
redisClusterSpring.add(" try {");
redisClusterSpring.add(" //根据自己需要修改参数");
redisClusterSpring.add(" redisCluster = ClientBuilder.redisCluster(appId)");
redisClusterSpring.add(" .setJedisPoolConfig(poolConfig)");
redisClusterSpring.add(" .setTimeout(2)");
redisClusterSpring.add(" .build();");
redisClusterSpring.add(" } catch (Exception e) {");
redisClusterSpring.add(" logger.error(e.getMessage(), e);");
redisClusterSpring.add(" }");
redisClusterSpring.add(" }");
redisClusterSpring.add("");
redisClusterSpring.add(" public PipelineCluster getRedisCluster() {");
redisClusterSpring.add(" return redisCluster;");
redisClusterSpring.add(" }");
redisClusterSpring.add("");
redisClusterSpring.add(" public void setAppId(int appId) {");
redisClusterSpring.add(" this.appId = appId;");
redisClusterSpring.add(" }");
redisClusterSpring.add("}");
}
/**
* 获取依赖
* @return
*/
public static List<String> getDependencyRedis() {
List<String> dependencyRedis = new ArrayList<String>();
// redis版本
String redisGoodVersion = getGoodVersion();
// 依赖
dependencyRedis.add("<dependency> ");
dependencyRedis.add(" <groupId>com.sohu.tv</groupId> ");
dependencyRedis.add(" <artifactId>cachecloud-open-client-redis</artifactId> ");
dependencyRedis.add(" <version>" + redisGoodVersion + "</version> ");
dependencyRedis.add("</dependency> ");
dependencyRedis.add("<repositories> ");
dependencyRedis.add(" <repository> ");
dependencyRedis.add(" <id>sohu.nexus</id> ");
dependencyRedis.add(" <url>" + ConstUtils.MAVEN_WAREHOUSE + "</url>");
dependencyRedis.add(" </repository> ");
dependencyRedis.add("</repositories> ");
return dependencyRedis;
}
/**
* 获取最好的版本
* @return
*/
private static String getGoodVersion() {
String[] redisGoodVersionArr = ConstUtils.GOOD_CLIENT_VERSIONS.split(ConstUtils.COMMA);
List<String> redisGoodVersions = Arrays.asList(redisGoodVersionArr);
String redisGoodVersion = redisGoodVersions.get(redisGoodVersions.size() - 1);
return redisGoodVersion;
}
public static List<String> getCode(int appType, long appId) {
List<String> list = null;
switch (appType) {
case ConstUtils.CACHE_REDIS_SENTINEL: {
list = new ArrayList<String>(redisSentinel);
break;
}
case ConstUtils.CACHE_REDIS_STANDALONE: {
list = new ArrayList<String>(redisStandalone);
break;
}
case ConstUtils.CACHE_TYPE_REDIS_CLUSTER: {
list = new ArrayList<String>(redisCluster);
break;
}
}
if (list != null && list.size() > 0) {
if (!list.get(0).contains("appId =")) {
list.add(0, "long appId = " + appId + ";");
}
// else {
// list.set(0, "long appId = " + appDesc.getAppId() + ";");
// }
}
return list;
}
public static List<String> getSpringConfig(int appType, long appId) {
List<String> list = new ArrayList<String>();
switch (appType) {
case ConstUtils.CACHE_REDIS_SENTINEL: {
list.addAll(redisSentinelSpring);
break;
}
case ConstUtils.CACHE_REDIS_STANDALONE: {
// list = new ArrayList<String>();
// list.add("CACHE_REDIS_STANDALONE spring");
break;
}
case ConstUtils.CACHE_TYPE_REDIS_CLUSTER: {
list.addAll(redisClusterSpring);
break;
}
}
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
String line = list.get(i);
if (line != null && line.contains(springAppId)) {
line = line.replace(springAppId,
String.valueOf(appId));
list.set(i, line);
}
}
}
return null;
}
public static String getRestAPI(int appType, long appId) {
String redisGoodVersion = getGoodVersion();
String appTypePath = "";
switch (appType) {
case ConstUtils.CACHE_REDIS_SENTINEL: {
appTypePath = "sentinel";
break;
}
case ConstUtils.CACHE_REDIS_STANDALONE: {
appTypePath = "standalone";
break;
}
case ConstUtils.CACHE_TYPE_REDIS_CLUSTER: {
appTypePath = "cluster";
break;
}
}
return ConstUtils.CC_DOMAIN + "/cache/client/redis/" + appTypePath + "/" + appId + ".json?clientVersion="
+ redisGoodVersion;
}
}