From fa6937881cef0ec3c9567e7e97f5d532a4ed87f7 Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 19 Feb 2021 15:23:49 +0800 Subject: [PATCH] =?UTF-8?q?redis=E6=A8=A1=E7=B3=8Akey=EF=BC=8Cscan?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/db/mongo/AreaManager.java | 6 +-- .../com/ljsd/jieling/db/redis/RedisUtil.java | 37 +++++++++---------- .../jieling/logic/family/DeathPathLogic.java | 5 ++- .../jieling/logic/help/HelpHeroLogic.java | 5 ++- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java index ee37a3882..6f4aad623 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/mongo/AreaManager.java @@ -239,8 +239,7 @@ public class AreaManager { //合并排行榜 //查找本服所有排行榜 - Set keys =new HashSet<>(); - RedisUtil.getInstence().arenaAddDim(areaId+ "*" + "RANK*",200,keys); + Set keys = RedisUtil.getInstence().getDimKey(areaId+ "*" + "RANK*",200); keys.forEach(k->{ Set> set= RedisUtil.getInstence().getAllZsetRange(k); @@ -269,8 +268,7 @@ public class AreaManager { //合并名称 //查找本服所有名称 - Set keys =new HashSet<>(); - RedisUtil.getInstence().arenaAddDim(areaId+ ":" + RedisKey.C_User_Name_Key+"*",200,keys); + Set keys = RedisUtil.getInstence().getDimKey(areaId+ ":" + RedisKey.C_User_Name_Key+"*",200); keys.forEach(k->{ Object oldUserId = RedisUtil.getInstence().get(k); diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java index 03bf77538..610cb68da 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisUtil.java @@ -70,32 +70,29 @@ public class RedisUtil { new ConvertingCursor<>(redisConnection.scan(match1.build()), redisSerializer::deserialize)); } - public void arenaAddDim(String key, int count, Set keys) throws IOException { - Cursor cursor = RedisUtil.getInstence().scan( key, count); - while (cursor.hasNext()){ - //找到一次就添加一次 - keys.add(cursor.next()); - } - cursor.close(); - } - /** - * 模糊删除key - * serverId +":" + key + "*" + * 根据模糊key获取数据 * @param key * @param count - * @throws IOException + * @return */ - public void delDim(String key, int count) throws IOException { - Cursor cursor = RedisUtil.getInstence().scan(key, count); - while (cursor.hasNext()) { - //找到一次就添加一次 - String next = cursor.next(); - LOGGER.info("批量模糊删除{}",next); - RedisUtil.getInstence().del(next); + public Set getDimKey(String key, int count){ + Set keys = new HashSet<>(); + long start = System.currentTimeMillis(); + try { + Cursor cursor = RedisUtil.getInstence().scan(key, count); + while (cursor.hasNext()){ + //添加key + keys.add(cursor.next()); + } + cursor.close(); + } catch (IOException e) { + e.printStackTrace(); } - cursor.close(); + LOGGER.info("scan扫描共耗时:{} ms ,key数量:{},模糊key:{}",System.currentTimeMillis()-start,keys.size(),key); + return keys; } + /** * 指定缓存失效时间 * diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java index d9f0bc619..243b0ce2d 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/family/DeathPathLogic.java @@ -653,7 +653,10 @@ public class DeathPathLogic { } - RedisUtil.getInstence().delDim(serverId +":DEATH_PATH*", -1); + Set keys = RedisUtil.getInstence().getDimKey(serverId + ":DEATH_PATH*", -1); + keys.forEach(key->{ + RedisUtil.getInstence().del(key); + }); } public static int nextDiscrete(double[] probs) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java index 4a45adfa2..fd6ef4f75 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/help/HelpHeroLogic.java @@ -307,7 +307,10 @@ public class HelpHeroLogic { int serverId = GameApplication.serverId; String key = serverId +":" + RedisKey.HELP_FIGHT + "*"; // 模糊批量删除key - RedisUtil.getInstence().delDim(key,-1); + Set keys = RedisUtil.getInstence().getDimKey(key, -1); + keys.forEach(k->{ + RedisUtil.getInstence().del(k); + }); } /**