清除冗余公会信息

grimm 2025-07-27 07:27:29 +08:00
parent e4acc31707
commit 4a11caa52e
2 changed files with 31 additions and 5 deletions

View File

@ -155,6 +155,7 @@ public class GuilidManager {
continue;
}
Set<Integer> value = memberEntry.getValue();
List<Integer> 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<Integer,Set<Integer>> map = new HashMap<>();
for(int j=0;j<200;j++){
Set<Integer> set = new HashSet<>();
for(int i = 0;i<200;i++){
set.add(i);
}
map.put(j,set);
}
long now = System.currentTimeMillis();
for (Map.Entry<Integer, Set<Integer>> memberEntry : map.entrySet()) {
List<Integer> removes = new ArrayList<>();
Set<Integer> value = memberEntry.getValue();
for (Integer uidTmp : value) {
removes.add(uidTmp);
}
value.removeAll(removes);
}
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - now) + "ms");
}
}

View File

@ -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<Integer> uids){
boolean remove = members.get(type).removeAll(uids);
return remove;
}