From bc600c12a40dfae5d668749d418000d9999330ee Mon Sep 17 00:00:00 2001 From: RenKaiGe-Office Date: Thu, 31 May 2018 17:07:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9DBIndex=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nis/util/ServiceAndRDBIndexReal.java | 28 ++- .../service/restful/ConfigRedisService.java | 7 +- .../restful/ConfigRedisServiceimpl.java | 237 +++++++++++++----- 3 files changed, 193 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/nis/util/ServiceAndRDBIndexReal.java b/src/main/java/com/nis/util/ServiceAndRDBIndexReal.java index 3d5dd68..6e48fa8 100644 --- a/src/main/java/com/nis/util/ServiceAndRDBIndexReal.java +++ b/src/main/java/com/nis/util/ServiceAndRDBIndexReal.java @@ -1,6 +1,9 @@ package com.nis.util; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -21,7 +24,7 @@ public class ServiceAndRDBIndexReal { /** * key是业务类型,value是业务类型对应的redisdbIndex */ - private static Map serviceDBIndexmap = new HashMap(); + private static Map> serviceDBIndexmap = new HashMap>(); static { String service = Configurations.getStringProperty("service", ""); @@ -49,21 +52,26 @@ public class ServiceAndRDBIndexReal { String[] serviceDBIndexArr = serviceDBIndexs.split(";"); for (String serviceDBIndexStr : serviceDBIndexArr) { String[] serviceDBIndex = serviceDBIndexStr.split(":"); - + List redisDbList = new ArrayList(); String[] redisDbArr = serviceDBIndex[1].split(","); - for (String redisDBIndex : redisDbArr) { - serviceDBIndexmap.put(Integer.parseInt(serviceDBIndex[0]), Integer.parseInt(redisDBIndex)); + for (String redisDbStr : redisDbArr) { + redisDbList.add(Integer.valueOf(redisDbStr)); } + serviceDBIndexmap.put(Integer.parseInt(serviceDBIndex[0]), redisDbList); } } } - - public static Integer getRedisDBByService(Integer service) { - Integer redisIndex = serviceDBIndexmap.get(service); - if (redisIndex == null) { - return 0; +/** + * 根据业务类型获取这个 + * @param service + * @return + */ + public static List getRedisDBByService(Integer service) { + List redisIndexList = serviceDBIndexmap.get(service); + if (redisIndexList == null) { + return null; } - return redisIndex; + return redisIndexList; } /** diff --git a/src/main/java/com/nis/web/service/restful/ConfigRedisService.java b/src/main/java/com/nis/web/service/restful/ConfigRedisService.java index 4baee97..18b2388 100644 --- a/src/main/java/com/nis/web/service/restful/ConfigRedisService.java +++ b/src/main/java/com/nis/web/service/restful/ConfigRedisService.java @@ -51,16 +51,15 @@ public interface ConfigRedisService { /** * 下发配置成功后,需要更新编译,组,域等配置id的对应关系 - * @param maatConfigList - * @param service 业务类型 + * @param configMap */ - public void addMaatRelation(List maatConfigList, int service); + public void addMaatRelation(Map> configMap); /** * 删除配置成功后,需要更新编译,组,域等配置id的对应关系 * @param maatConfigLis * @param service 业务类型 */ - public void delMaatRelation(List compileIdList, int service); + public void delMaatRelation(Map>> idMap); } diff --git a/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java b/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java index 52f4719..d9d8b63 100644 --- a/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java +++ b/src/main/java/com/nis/web/service/restful/ConfigRedisServiceimpl.java @@ -1,5 +1,6 @@ package com.nis.web.service.restful; +import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; @@ -7,6 +8,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.apache.axis2.databinding.types.soapencoding.Array; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; @@ -139,74 +141,81 @@ public class ConfigRedisServiceimpl implements ConfigRedisService { } @Override - public void addMaatRelation(List maatConfigList, int service) { - Integer redisDBIndex = ServiceAndRDBIndexReal.getRedisDBByService(service); - MaatRelation maatRelation = CompileGroupRegionRela.getIdRelationMap().get(redisDBIndex); + public void addMaatRelation(Map> configMap) { + if (configMap != null && configMap.size() > 0) { + for (Integer redisDBIndex : configMap.keySet()) { + if (redisDBIndex >= 0 && redisDBIndex <= 15) { + MaatRelation maatRelation = CompileGroupRegionRela.getIdRelationMap().get(redisDBIndex); + List maatConfigList = configMap.get(redisDBIndex); + if (maatConfigList != null && maatConfigList.size() > 0) { + for (MaatConfig maatConfig : maatConfigList) { + // MaatXmlConfig maatXmlConfig = + // ReadMaatXmlUtil.getMaatConfigByService(service); + List> groupMapList = maatConfig.getGroupMapList(); + if (groupMapList != null && groupMapList.size() > 0) { + for (Map map : groupMapList) { + String compileIdStr = map.get("cfg_id"); + String groupIdStr = map.get("group_id"); + if (compileIdStr != null && !compileIdStr.equals("") && groupIdStr != null + && !groupIdStr.equals("")) { + Long groupId = Long.valueOf(groupIdStr); + Long compileId = Long.valueOf(compileIdStr); + Map> groupAndCompileMap = maatRelation.getGroupAndCompileMap(); + if (groupAndCompileMap != null) { + if (groupAndCompileMap.containsKey(groupId)) { + groupAndCompileMap.get(groupId).add(compileId); + } else { + Set set = new HashSet(); + set.add(compileId); + groupAndCompileMap.put(groupId, set); + } + } else { + Map> groupAndCompileMap1 = new ConcurrentHashMap>(); + Set set = new HashSet(); + set.add(compileId); + groupAndCompileMap1.put(groupId, set); + maatRelation.setGroupAndCompileMap(groupAndCompileMap1); + } - for (MaatConfig maatConfig : maatConfigList) { - // MaatXmlConfig maatXmlConfig = - // ReadMaatXmlUtil.getMaatConfigByService(service); - - List> groupMapList = maatConfig.getGroupMapList(); - if (groupMapList != null && groupMapList.size() > 0) { - for (Map map : groupMapList) { - String compileIdStr = map.get("compile_id"); - String groupIdStr = map.get("group_id"); - if (compileIdStr != null && !compileIdStr.equals("") && groupIdStr != null - && !groupIdStr.equals("")) { - Long groupId = Long.valueOf(groupIdStr); - Long compileId = Long.valueOf(compileIdStr); - Map> groupAndCompileMap = maatRelation.getGroupAndCompileMap(); - if (groupAndCompileMap != null) { - if (groupAndCompileMap.containsKey(groupId)) { - groupAndCompileMap.get(groupId).add(compileId); - } else { - Set set = new HashSet(); - set.add(compileId); - groupAndCompileMap.put(groupId, set); + Map> compileAndGroupMap = maatRelation.getCompileAndGroupMap(); + if (compileAndGroupMap != null) { + if (compileAndGroupMap.containsKey(compileId)) { + compileAndGroupMap.get(compileId).add(groupId); + } else { + Set set = new HashSet(); + set.add(groupId); + compileAndGroupMap.put(compileId, set); + } + } else { + Map> compileAndGroupMap1 = new ConcurrentHashMap>(); + Set set = new HashSet(); + set.add(groupId); + compileAndGroupMap1.put(compileId, set); + maatRelation.setCompileAndGroupMap(compileAndGroupMap1); + } + } + } } - } else { - Map> groupAndCompileMap1 = new ConcurrentHashMap>(); - Set set = new HashSet(); - set.add(compileId); - groupAndCompileMap1.put(groupId, set); - maatRelation.setGroupAndCompileMap(groupAndCompileMap1); - } + List> ipRegionMapList = maatConfig.getIpRegionMapList(); + setReionAndGroupRela(ipRegionMapList, maatRelation); + List> numRegionMapList = maatConfig.getNumRegionMapList(); + setReionAndGroupRela(numRegionMapList, maatRelation); + List> strRegionMapList = maatConfig.getStrRegionMapList(); + setReionAndGroupRela(strRegionMapList, maatRelation); + List> strStrRegionMapList = maatConfig.getStrStrRegionMapList(); + setReionAndGroupRela(strStrRegionMapList, maatRelation); + List> fileDigestRegionMapList = maatConfig.getFileDigestRegionMapList(); + setReionAndGroupRela(fileDigestRegionMapList, maatRelation); + List> fileLikeRegionMapList = maatConfig.getFileLikeRegionMapList(); + setReionAndGroupRela(fileLikeRegionMapList, maatRelation); - Map> compileAndGroupMap = maatRelation.getCompileAndGroupMap(); - if (compileAndGroupMap != null) { - if (compileAndGroupMap.containsKey(compileId)) { - compileAndGroupMap.get(compileId).add(groupId); - } else { - Set set = new HashSet(); - set.add(groupId); - compileAndGroupMap.put(compileId, set); - } - } else { - Map> compileAndGroupMap1 = new ConcurrentHashMap>(); - Set set = new HashSet(); - set.add(groupId); - compileAndGroupMap1.put(compileId, set); - maatRelation.setCompileAndGroupMap(compileAndGroupMap1); } } + } } - - List> ipRegionMapList = maatConfig.getIpRegionMapList(); - setReionAndGroupRela(ipRegionMapList, maatRelation); - List> numRegionMapList = maatConfig.getNumRegionMapList(); - setReionAndGroupRela(numRegionMapList, maatRelation); - List> strRegionMapList = maatConfig.getStrRegionMapList(); - setReionAndGroupRela(strRegionMapList, maatRelation); - List> strStrRegionMapList = maatConfig.getStrStrRegionMapList(); - setReionAndGroupRela(strStrRegionMapList, maatRelation); - List> fileDigestRegionMapList = maatConfig.getFileDigestRegionMapList(); - setReionAndGroupRela(fileDigestRegionMapList, maatRelation); - List> fileLikeRegionMapList = maatConfig.getFileLikeRegionMapList(); - setReionAndGroupRela(fileLikeRegionMapList, maatRelation); - } + } public void setReionAndGroupRela(List> regionMapList, MaatRelation maatRelation) { @@ -265,6 +274,7 @@ public class ConfigRedisServiceimpl implements ConfigRedisService { redisTemplate.boundValueOps("MAAT_VERSION").increment(1l); } } + addMaatRelation(configMap); } } @@ -398,7 +408,6 @@ public class ConfigRedisServiceimpl implements ConfigRedisService { public Long getIncrId(String key) { RedisTemplate redisTemplate = SpringContextHolder.getBean("redisTemplate0"); return redisTemplate.boundValueOps(key.toUpperCase()).increment(1l); - // return redisTemplate.boundValueOps("MAAT_VERSION").increment(1l); } @Override @@ -508,24 +517,122 @@ public class ConfigRedisServiceimpl implements ConfigRedisService { if (maatVersionStr == null) { maatVersionStr = "0"; } + MaatRelation maatRelation = CompileGroupRegionRela.getIdRelationMap().get(redisDBIndex); if (maatVersionStr != null) { Long maatVersion = Long.valueOf(maatVersionStr) + 1; for (Integer service : serviceConfigMap.keySet()) { + MaatXmlConfig maatXmlConfig = ReadMaatXmlUtil.getMaatConfigByService(service); + setConfig(serviceConfigMap.get(service), maatXmlConfig, maatVersion, service, redisTemplate, + maatRelation); } - redisTemplate.boundValueOps("MAAT_VERSION").increment(1l); } } } + // 删除配置成功后开始删除id对应关系 + delMaatRelation(idMap); } } - @Override - public void delMaatRelation(List compileIdList, int service) { - // TODO Auto-generated method stub + public void setConfig(List idList, MaatXmlConfig maatXmlConfig, Long maatVersion, int service, + RedisTemplate redisTemplate, MaatRelation maatRelation) { + if (maatRelation != null && idList != null && idList.size() > 0 && maatXmlConfig != null) { + for (Long id : idList) { + Set compileIdList = new HashSet(); + compileIdList.add(id); + setCommonConfig(maatXmlConfig, compileIdList, 10, maatVersion.doubleValue(), service, redisTemplate);// 10代表是编译配置 + Set groupSet = maatRelation.getCompileAndGroupMap().get(id); + if (groupSet != null && groupSet.size() > 0) { + setCommonConfig(maatXmlConfig, groupSet, 11, maatVersion.doubleValue(), service, redisTemplate);// 11代表是分组配置 + for (Long groupId : groupSet) { + Set regionIdSet = maatRelation.getGroupAndRegionMap().get(groupId); + if (regionIdSet != null && regionIdSet.size() > 0) { + setCommonConfig(maatXmlConfig, regionIdSet, 12, maatVersion.doubleValue(), service, + redisTemplate);// 12代表是ip类域配置 + setCommonConfig(maatXmlConfig, regionIdSet, 13, maatVersion.doubleValue(), service, + redisTemplate);// 13代表是数值类配置 + setCommonConfig(maatXmlConfig, regionIdSet, 14, maatVersion.doubleValue(), service, + redisTemplate);// 14代表是字符串类域配置 + setCommonConfig(maatXmlConfig, regionIdSet, 15, maatVersion.doubleValue(), service, + redisTemplate);// 15代表是增强字符串类域配置 + setCommonConfig(maatXmlConfig, regionIdSet, 16, maatVersion.doubleValue(), service, + redisTemplate);// 16代表是文件摘要类域配置 + setCommonConfig(maatXmlConfig, regionIdSet, 17, maatVersion.doubleValue(), service, + redisTemplate);// 17代表是文本相似性域配置 + } + } + } + } + } + } + public void setCommonConfig(MaatXmlConfig maatXmlConfig, Set idList, int type, Double maatVersion, + int service, RedisTemplate redisTemplate) { + if (maatXmlConfig != null && idList != null && idList.size() > 0) { + List expressionList = maatXmlConfig.getExpressionList(); + String maatKey = ""; + for (Long id : idList) { + for (MaatXmlExpr maatXmlExpr : expressionList) { + if (type == maatXmlExpr.getType().intValue()) { + StringBuffer keyBF = new StringBuffer(); + String[] keySplit = maatXmlExpr.getKeyExpression().split(";"); + for (String keyStr : keySplit) { + if (!StringUtils.isEmpty(keyStr) && keyStr.trim().startsWith("[")) { + keyStr = keyStr.trim().replace("[", "").replace("]", ""); + keyBF.append(id); + } else if (!StringUtils.isEmpty(keyStr) && keyStr.trim().startsWith("{")) { + keyStr = keyStr.trim().replace("{", "").replace("}", ""); + if (keyStr.toLowerCase().contains("table_name")) { + keyBF.append(ServiceAndRDBIndexReal.getTableName(service, type)); + } + + } else { + keyBF.append(keyStr.trim()); + } + } + String oldKey = maatKey.toUpperCase(); + maatKey = oldKey.replace("EFFECTIVE_RULE", "OBSOLETE_RULE"); + redisTemplate.rename(maatKey.toUpperCase(), maatKey); + break; + } + } + for (MaatXmlExpr maatXmlExpr : expressionList) { + if (maatXmlExpr.getKeyExpression().toUpperCase().equals("MAAT_UPDATE_STATUS")) { + String zset = maatKey.replace("OBSOLETE_RULE:", "DEL,"); + redisTemplate.boundZSetOps("MAAT_UPDATE_STATUS").add(zset, maatVersion); + } else if (maatXmlExpr.getKeyExpression().toUpperCase().equals("MAAT_RULE_TIMER")) { + Double score = 0d;// 界面下发的配置没有超时时间所以这里设置为0 + redisTemplate.boundZSetOps("MAAT_RULE_TIMER").add(maatKey, score); + } else if (maatXmlExpr.getKeyExpression().toUpperCase().equals("MAAT_VERSION_TIMER")) { + Long nowTime = new Date().getTime(); + nowTime = nowTime / 1000l; + Double score = nowTime.doubleValue();// 使用redis自带的time,得到当前时间的秒 + redisTemplate.boundZSetOps("MAAT_VERSION_TIMER").add(maatVersion + "", score); + } + } + } + } + } + + @Override + public void delMaatRelation(Map>> idMap) { + if (idMap != null && idMap.size() > 0) { + for (Integer redisDBIndex : idMap.keySet()) { + if (redisDBIndex >= 0 && redisDBIndex <= 15) { + MaatRelation maatRelation = CompileGroupRegionRela.getIdRelationMap().get(redisDBIndex); +// maatRelation + + + + + + + + } + } + } } }