From db24069faaf3d9bb43e0e4b00bb146af6ea2e0ef Mon Sep 17 00:00:00 2001 From: renkaige Date: Wed, 13 Feb 2019 16:16:41 +0800 Subject: [PATCH] =?UTF-8?q?1:=E4=BF=AE=E6=94=B9=E5=AE=9E=E6=97=B6=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E9=85=8D=E7=BD=AE=E5=90=91=E9=9B=86=E7=BE=A4=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E6=97=B6=E6=B2=A1=E6=9C=89=E5=B0=86=E5=93=A8=E5=85=B5?= =?UTF-8?q?=E7=9A=84=E8=BF=9E=E6=8E=A5=E5=85=B3=E9=97=AD=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E8=A2=AB=E5=8D=A0=E6=BB=A1=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=202:=E4=BF=AE=E6=94=B9=E4=BB=8Eredis=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=87=AA=E5=A2=9E=E9=95=BF=E5=80=BC=E6=97=B6=E5=8F=AF?= =?UTF-8?q?=E8=83=BD=E5=AD=98=E5=9C=A8=E7=9A=84redis=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=9C=AA=E5=85=B3=E9=97=AD=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/nis/util/JedisUtils.java | 14 +++- .../com/nis/web/task/SyncRedisToCluster.java | 64 +++++++++++-------- 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/nis/util/JedisUtils.java b/src/main/java/com/nis/util/JedisUtils.java index 86f59fe..5957dfc 100644 --- a/src/main/java/com/nis/util/JedisUtils.java +++ b/src/main/java/com/nis/util/JedisUtils.java @@ -76,9 +76,17 @@ public class JedisUtils { * @return long 相加后的值 */ public static long incrBy(String key, long number, int redisDb) { - Jedis jedis = getResource(redisDb); - long len = jedis.incrBy(key, number); - returnResource(jedis); + Jedis jedis = null; + long len = 0l; + try { + jedis = getResource(redisDb); + len = jedis.incrBy(key, number); + } catch (Exception e) { + throw new ServiceRuntimeException("从" + redisDb + "号redisDB中获取自增值" + key + "失败", + RestBusinessCode.KeyNotExistsInRedis.getValue()); + } finally { + returnResource(jedis); + } return len; } diff --git a/src/main/java/com/nis/web/task/SyncRedisToCluster.java b/src/main/java/com/nis/web/task/SyncRedisToCluster.java index 7fa4a1d..da0146d 100644 --- a/src/main/java/com/nis/web/task/SyncRedisToCluster.java +++ b/src/main/java/com/nis/web/task/SyncRedisToCluster.java @@ -71,9 +71,9 @@ public class SyncRedisToCluster { } } } - + // @Scheduled(cron = "${syncRedisToClusterCron}") - public void syncRedisToCluster() { + public void syncRedisToCluster1() { JedisCluster jedisCluster = getResource(); String requestId = UUID.randomUUID().toString(); try { @@ -207,35 +207,45 @@ public class SyncRedisToCluster { } public void syncData(JedisCluster jedisCluster, Double min, Double max, String verionStr) { - Jedis resource = JedisUtils.getResource(redisStatisticsRealDBIndex); - Set zrangeByScoreWithScores = null; - if (min == null && max == null) { - int version = Integer.parseInt(verionStr); - int maxVersion = 1000; - int count = version / maxVersion; - if ((version % maxVersion) != 0) { - count++; - } - min = 0D; - for (int i = 0; i < count; i++) { - int start = i * maxVersion + 1; - int end = (i + 1) * maxVersion; - if (end > version) { - end = version; + Jedis resource = null; + try { + resource = JedisUtils.getResource(redisStatisticsRealDBIndex); + Set zrangeByScoreWithScores = null; + if (min == null && max == null) { + int version = Integer.parseInt(verionStr); + int maxVersion = 1000; + int count = version / maxVersion; + if ((version % maxVersion) != 0) { + count++; } - min = Double.parseDouble(start + ""); - max = Double.parseDouble(end + ""); - // 分批获取,避免一次性获取太多,造成redis阻塞 - zrangeByScoreWithScores = resource.zrangeByScoreWithScores("MAAT_UPDATE_STATUS", min, max);// 获取所有的maat_update_status + min = 0D; + for (int i = 0; i < count; i++) { + int start = i * maxVersion + 1; + int end = (i + 1) * maxVersion; + if (end > version) { + end = version; + } + min = Double.parseDouble(start + ""); + max = Double.parseDouble(end + ""); + // 分批获取,避免一次性获取太多,造成redis阻塞 + zrangeByScoreWithScores = resource.zrangeByScoreWithScores("MAAT_UPDATE_STATUS", min, max);// 获取所有的maat_update_status + syncData(jedisCluster, zrangeByScoreWithScores); + } + } else { + zrangeByScoreWithScores = resource.zrangeByScoreWithScores("MAAT_UPDATE_STATUS", min, max);// 获取增量的数据 syncData(jedisCluster, zrangeByScoreWithScores); } - } else { - zrangeByScoreWithScores = resource.zrangeByScoreWithScores("MAAT_UPDATE_STATUS", min, max);// 获取增量的数据 - syncData(jedisCluster, zrangeByScoreWithScores); + jedisCluster.set("MAAT_VERSION", verionStr); + logger.info("更新了redis集群中的MAAT_VERSION,更新后值是{}", verionStr); + logger.info("向redis集群同步数据成功"); + } catch (Exception e) { + throw new ServiceRuntimeException("从" + redisStatisticsRealDBIndex + "号redisDB中获取实时统计数据失败", + RestBusinessCode.ExistsKeyFailed.getValue()); + } finally { + if (resource != null) { + resource.close(); + } } - jedisCluster.set("MAAT_VERSION", verionStr); - logger.info("更新了redis集群中的MAAT_VERSION,更新后值是{}", verionStr); - logger.info("向redis集群同步数据成功"); } private void syncData(JedisCluster jedisCluster, Set zrangeByScoreWithScores) {