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; } }