All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.tinygroup.jedis.impl.ShardJedisSentinelManagerImpl Maven / Gradle / Ivy

There is a newer version: 2.2.3
Show newest version
package org.tinygroup.jedis.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.tinygroup.beancontainer.BeanContainerFactory;
import org.tinygroup.jedis.ShardJedisSentinelManager;
import org.tinygroup.jedis.config.ShardJedisSentinelConfig;
import org.tinygroup.jedis.config.ShardJedisSentinelConfigs;
import org.tinygroup.jedis.config.ShardSentinelConfig;
import org.tinygroup.jedis.config.ShardSentinelConfigs;
import org.tinygroup.jedis.shard.TinyShardJedis;
import org.tinygroup.jedis.shard.TinyShardedJedisSentinelPool;
import org.tinygroup.jedis.util.JedisUtil;

import redis.clients.jedis.JedisPoolConfig;


public class ShardJedisSentinelManagerImpl implements ShardJedisSentinelManager {

	private Map> map = new HashMap>();
	private TinyShardedJedisSentinelPool pool;
	
	public ShardJedisSentinelManagerImpl(ShardJedisSentinelConfigs configs){
		addJedisSentinelConfigs(configs);
		String pool = configs.getPool();
		JedisPoolConfig jedisConfig = BeanContainerFactory.getBeanContainer(
				ShardJedisSentinelManagerImpl.class.getClassLoader())
				.getBean(pool);
		init(jedisConfig);
	}
	
	private void addJedisSentinelConfigs(ShardJedisSentinelConfigs configs) {
		for (ShardJedisSentinelConfig config : configs
				.getJedisShardSentinelConfigsList()) {
			addJedisSentinelConfig(config);
		}

	}

	private void addJedisSentinelConfig(ShardJedisSentinelConfig config) {
		for (ShardSentinelConfigs shardSentinelConfigs : config
				.getShardSentinelConfigs()) {
			addShardSentinelConfigs(shardSentinelConfigs);
		}

	}

	private void addShardSentinelConfigs(ShardSentinelConfigs config) {
		String sentinels = config.getSentinels();
		List shardSentinelConfigLists = config
				.getShardSentinelConfigLists();
		if (shardSentinelConfigLists.size() == 0) {
			return;
		}
		Map sentinelMaster = map.get(sentinels);
		if (sentinelMaster == null) {
			sentinelMaster = new HashMap();
			map.put(sentinels, sentinelMaster);
		}
		for(ShardSentinelConfig shardSentinelConfig:config.getShardSentinelConfigLists()){
			String masterName = shardSentinelConfig.getMasterName();
			if(!sentinelMaster.containsKey(sentinelMaster)){
				sentinelMaster.put(masterName, shardSentinelConfig);
			}
		}
	}

	private void init(GenericObjectPoolConfig poolConfig){
		if(poolConfig==null){
			throw new RuntimeException("初始化连接池不可为空");
		}
		destroy();
		pool = new TinyShardedJedisSentinelPool(map, poolConfig);
	}
	
	public void destroy(){
		if(pool!=null){
			pool.destroy();
		}
	}
	
	
	public TinyShardJedis getShardedJedis() {
		return pool.getResource();
	}
	
	public void returnResourceObject(TinyShardJedis resource){
		resource.resetWriteState();
		pool.returnResourceObject(resource);
	}
	public void returnResource(TinyShardJedis resource){
		resource.resetWriteState();
		pool.returnResource(resource);
	}
	public void returnBrokenResource(TinyShardJedis resource){
		resource.resetWriteState();
		pool.returnBrokenResource(resource);
	}

	public void setFailOverTime(int failOverTime) {
		JedisUtil.setFailOverTime(failOverTime);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy