package com.sohu.cache.client.service.impl; import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sohu.cache.client.service.ClientReportInstanceService; import com.sohu.cache.dao.InstanceDao; import com.sohu.cache.entity.InstanceInfo; /** * @author leifu * @Date 2016年5月5日 * @Time 上午11:05:35 */ public class ClientReportInstanceServiceImpl implements ClientReportInstanceService { private Logger logger = LoggerFactory.getLogger(ClientReportInstanceServiceImpl.class); /** * 不要求一致性的本地缓存(hostport<=>instanceInfo) */ private final static ConcurrentHashMap<String, InstanceInfo> hostPortInstanceMap = new ConcurrentHashMap<String, InstanceInfo>(); private InstanceDao instanceDao; @Override public InstanceInfo getInstanceInfoByHostPort(String host, int port) { String hostPort = host + ":" + port; try { InstanceInfo instanceInfo = hostPortInstanceMap.get(hostPort); if (instanceInfo == null) { instanceInfo = instanceDao.getInstByIpAndPort(host, port); if (instanceInfo != null) { hostPortInstanceMap.putIfAbsent(hostPort, instanceInfo); } } return instanceInfo; } catch (Exception e) { logger.error(e.getMessage(), e); return null; } } public void setInstanceDao(InstanceDao instanceDao) { this.instanceDao = instanceDao; } }