/** * 生成虚拟节点信息 @Title: genVisualCacheNode * * @param cacheNode * @author: zzh * @date: 2016年12月2日 下午8:59:35 * @version: v1.0.0 */ private static List<VisualCacheNode> genVisualCacheNode(CacheNode cacheNode) { List<VisualCacheNode> visualCacheNodeList = new ArrayList<VisualCacheNode>(); for (int i = 0; i < SINGLE_VISUAL_NUM; i++) { String visualNodeKey = "VNode-" + cacheNode.getIp() + "-Num-" + i; // 对虚拟节点的key值做下md5 String md5VisualNodeKey = DigestUtils.md5Hex(visualNodeKey); // 使用common-codec工具包 int hashKey = DJBHash(md5VisualNodeKey); VisualCacheNode visualCacheNode = new VisualCacheNode(visualNodeKey, cacheNode); visualCacheNodeList.add(visualCacheNode); System.out.println( "虚拟节点信息:" + visualNodeKey + ", hashkey=" + hashKey + " , RealIp=" + cacheNode.getIp()); } return visualCacheNodeList; }
/** * 根据IP,删除真实节点 @Title: removeRealCache * * @param ip * @author: zzh * @date: 2016年12月4日 下午9:20:24 * @version: v1.0.0 */ private static void removeRealCache(String ip) { int removeCachePos = 0; for (int i = 0; i < realNodeList.size(); i++) { CacheNode c = realNodeList.get(i); if (ip.equals(c.getIp())) { removeCachePos = i; break; } } realNodeList.remove(removeCachePos); }