package com.sohu.cache.init; import com.sohu.cache.dao.InstanceDao; import com.sohu.cache.entity.InstanceInfo; import com.sohu.cache.redis.RedisCenter; import com.sohu.cache.util.ConstUtils; import com.sohu.cache.util.TypeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; /** * 初始化加载所有的redis实例 * * User: lingguo * Date: 14-6-11 * Time: 下午11:13 */ public class RedisInitLoad extends AsyncLoad{ private final Logger logger = LoggerFactory.getLogger(RedisInitLoad.class); private InstanceDao instanceDao; private RedisCenter redisCenter; public void init() { if (ConstUtils.IS_DEBUG) { logger.warn("isDebug=true return"); return; } executorService.submit(new Runnable() { @Override public void run() { try { initAsync(); } catch (Exception e) { logger.error(e.getMessage(), e); } } }); } /** * spring启动时调用,加载所有的redis实例 */ public void initAsync() { initByType(ConstUtils.CACHE_TYPE_REDIS_CLUSTER); initByType(ConstUtils.CACHE_REDIS_STANDALONE); } private void initByType(int type) { List<InstanceInfo> instanceInfoList = instanceDao.getInstListByType(type); for (InstanceInfo instanceInfo : instanceInfoList) { if (TypeUtil.isRedisSentinel(instanceInfo.getType())) { continue; } String host = instanceInfo.getIp(); int port = instanceInfo.getPort(); Long appId = instanceInfo.getAppId(); redisCenter.deployRedisCollection(appId, host, port); redisCenter.deployRedisSlowLogCollection(appId, host, port); } logger.info("init redis type={} deploy instance done.", type); } public void setInstanceDao(InstanceDao instanceDao) { this.instanceDao = instanceDao; } public void setRedisCenter(RedisCenter redisCenter) { this.redisCenter = redisCenter; } }