diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java index 5778e83..2bd7128 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/GuilidManager.java @@ -155,6 +155,7 @@ public class GuilidManager { continue; } Set value = memberEntry.getValue(); + List removes = new ArrayList<>(); for (Integer uidTmp : value) { if(uidTmp != null) { PlayerInfoCache userTmp = UserManager.getPlayerInfoCache(uidTmp); @@ -162,16 +163,19 @@ public class GuilidManager { long lastLoginTime = userTmp.getOffLineTime(); //离线超过一周,踢出公会,并清除内存 if((now - lastLoginTime) >= TimeUtils.WEEK){ - remove = guildInfo.removeMemberWithoutDb(position, uidTmp); + removes.add(uidTmp); } } else { - remove = guildInfo.removeMemberWithoutDb(position, uidTmp); + removes.add(uidTmp); } } } + if(removes.size() > 0){ + guildInfo.removeMemberAllWithoutDb(position, removes); + remove = true; + } } if(remove){ - LOGGER.info("删除公会成员的公会id:{}", guildInfo.getId()); guildInfo.resetMembers(); } } @@ -229,4 +233,26 @@ public class GuilidManager { key = RedisUtil.getInstence().getKey("guild-release", ""); RedisUtil.getInstence().zsetAddOne(key,Integer.toString(guildInfo.getId()),levelTime); } + + public static void main(String[] args) { + Map> map = new HashMap<>(); + for(int j=0;j<200;j++){ + Set set = new HashSet<>(); + for(int i = 0;i<200;i++){ + set.add(i); + } + map.put(j,set); + } + long now = System.currentTimeMillis(); + for (Map.Entry> memberEntry : map.entrySet()) { + List removes = new ArrayList<>(); + Set value = memberEntry.getValue(); + for (Integer uidTmp : value) { + removes.add(uidTmp); + } + value.removeAll(removes); + } + long end = System.currentTimeMillis(); + System.out.println("耗时:" + (end - now) + "ms"); + } } diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java index e4afdca..30003b1 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/root/GuildInfo.java @@ -110,8 +110,8 @@ public class GuildInfo extends MongoBase { return remove; } - public boolean removeMemberWithoutDb(int type,int uid){ - boolean remove = members.get(type).remove(uid); + public boolean removeMemberAllWithoutDb(int type,List uids){ + boolean remove = members.get(type).removeAll(uids); return remove; }