redis-高可用-代码层次调整

连接多个Redis以实现高可用:

public class RedisConnector {

	protected static JedisBalancer balancer = null;

	protected static Logger logger = Logger.getLogger(RedisConnector.class);

	public static synchronized JedisBalancer getBalancer() {

		if (balancer == null) {
			try {
				// 获取配置文件中的参数值
				String host = PropertiesUtil.getConfigInfo("redis.host");
				String host2 = PropertiesUtil.getConfigInfo("redis2.host");
				String port = PropertiesUtil.getConfigInfo("redis.port");
				String port2 = PropertiesUtil.getConfigInfo("redis2.port");
				String password = PropertiesUtil.getConfigInfo("redis.password");
				int timeout = 100000; // 单位为毫秒

				if (!StringUtil.isBlank(host) && !StringUtil.isBlank(port)) {

					JedisPoolConfig config = new JedisPoolConfig();
					// 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取;
					// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
					config.setMaxTotal(500);
					// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
					config.setMaxIdle(500);
					// 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
					config.setMaxWaitMillis(1000 * 100);
					// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
					config.setTestOnBorrow(true);

					if (!StringUtil.isBlank(password)) {
						DbpmConfig dbpmConfig = new DbpmConfig();
						dbpmConfig.setLocalPwd(password);
						balancer = new JedisBalancer(config, dbpmConfig,
								Strategy.roundRobin, timeout);
					} else {
						balancer = new JedisBalancer(config, null,
								Strategy.roundRobin, timeout);
					}
					balancer.addMember(host, Integer.parseInt(port));
					if (!StringUtil.isBlank(host2)
							&& !StringUtil.isBlank(port2)) {
						balancer.addMember(host2, Integer.parseInt(port2));
					}

					// 测试连接是否有效
					balancer.getResource().connect();
				}
			} catch (Exception e) {
				balancer = null;
				e.printStackTrace();
				logger.warn("Redis Config Error !!!");
			}
		}
		return balancer;
	}
}

  

posted @ 2020-11-13 19:07  时间会有答案  阅读(220)  评论(0编辑  收藏  举报