跨服分组修改

back_recharge
duhui 2021-11-04 10:11:42 +08:00
parent fb69e8de2e
commit 5c70df47db
6 changed files with 64 additions and 31 deletions

View File

@ -1,8 +1,5 @@
package com.ljsd.jieling.db.redis;
import com.ljsd.jieling.db.mongo.AreaManager;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import java.util.HashSet;
import java.util.Set;
@ -356,7 +353,8 @@ public class RedisKey {
public static final String GUILD_LEADER_CACHE = "GUILD_LEADER_CACHE";
public static final String CROSS_RANK_UPDATE_VERSION = "CROSS_RANK_UPDATE_VERSION";
public static final String CROSS_RANK_UPDATE = "CROSS_RANK_UPDATE";
public static final String CROSS_RANK_DELETE = "CROSS_RANK_DELETE";
//玉虚论道
public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息 废弃

View File

@ -1429,27 +1429,27 @@ public class RedisUtil {
if (result == null){
result = AreaManager.areaId + RedisKey.Delimiter_colon + type + RedisKey.Delimiter_colon + key;
}
deathPathKeyHandler(result);
helpHeroKeyHandler(result);
// 保存需要清理的key
saveRemoveKeyHandler(result);
return result;}
/**
* rediskey
* key
*/
private void deathPathKeyHandler(String key){
private void saveRemoveKeyHandler(String key){
// 十绝阵相关
if(key.contains("DEATH_PATH")){
RedisUtil.getInstence().sSet(RedisKey.DEATH_PATH_DELETE,key);
}
}
/**
* rediskey
*/
private void helpHeroKeyHandler(String key){
// 助战相关
if(key.contains("HELP_FIGHT")){
RedisUtil.getInstence().sSet(RedisKey.HELP_FIGHT_DELETE,key);
}
// 跨服排行榜相关
if(key.contains("CROSS_RANK_UPDATE")){
RedisUtil.getInstence().sSet(RedisKey.CROSS_RANK_DELETE,key);
}
}
private static final String LOCK_SUCCESS = "OK";

View File

@ -285,13 +285,20 @@ public class GlobleSystemLogic implements IEventHandler {
redisUtil.del(RedisKey.CHAT_CROSS_MSG_ID+i);
}
// 重新分组,需要删除旧排行榜数据,重新分组
redisUtil.delVague(RedisKey.CROSS_RANK_DELETE,"CROSS_RANK_UPDATE:.*");
//释放分布式锁
redisUtil.del("SERVER_SPLIT_REDIS_LOCK");
LOGGER.info("跨服分组结束");
// splitInfo = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO,"",String.class,Integer.class);
}
//获取当前区服的跨服区组 -1为未在分组内
/**
* -1
* @return
*/
public int getCrossGroup(){
//测试服不参与分组和跨服
if(!GameApplication.serverProperties.isArenaCross()){
@ -299,8 +306,23 @@ public class GlobleSystemLogic implements IEventHandler {
}
Integer group = RedisUtil.getInstence().getMapValue(RedisKey.SERVER_SPLIT_INFO, "", String.valueOf(GameApplication.serverId), Integer.class);
crossGroup = group==null?-1:group;
return crossGroup;
}
return crossGroup;
/**
* id
* @return
*/
public List<String> getCrossServersByGroup(){
int group = getCrossGroup();
Map<String, Integer> values = RedisUtil.getInstence().getMapValues(RedisKey.SERVER_SPLIT_INFO, "", String.class, Integer.class);
ArrayList<String> list = new ArrayList<>();
for (Map.Entry<String, Integer> entry : values.entrySet()) {
if (entry.getValue() == group){
list.add(entry.getKey());
}
}
return list;
}
}

View File

@ -1,5 +1,6 @@
package com.ljsd.jieling.logic.rank;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.dao.GuilidManager;
@ -11,6 +12,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.ZSetOperations;
import util.TimeUtils;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -45,7 +47,7 @@ public class CrossRankManager {
/**
*
*/
public void crossRankHandle(boolean choice){
public void crossRankHandle(){
// 时间验证
if (isTime()){
// 全部排行遍历
@ -57,11 +59,20 @@ public class CrossRankManager {
int crossGroup = GlobleSystemLogic.getInstence().getCrossGroup();
if(crossGroup != -1){
AbstractRank rank = RankContext.getRankEnum(type);
// 获取本服排行榜数据
Set<ZSetOperations.TypedTuple<String>> range = RedisUtil.getInstence().getZsetreverseRangeWithScores(rank.getRedisKey(), "", 0, 100, true);
// 批量放入跨服排行榜
// 获取跨服key
String key = RedisUtil.getInstence().getKey(rank.getCrossRedisKey(),"",false);
RedisUtil.getInstence().zsetAddAall(key,range);
// 清理旧榜数据
RedisUtil.getInstence().del(key);
// 获取本组的服务器列表
List<String> servers = GlobleSystemLogic.getInstence().getCrossServersByGroup();
for (String server : servers) {
String localKey = RedisUtil.getInstence().getKey(server, rank.getRedisKey(), false);
// 获取本地服排行榜数据
Set<ZSetOperations.TypedTuple<String>> range =
RedisUtil.getInstence().getZsetreverseRangeWithScores(localKey,"",0,100, false);
// 批量放入跨服排行榜
RedisUtil.getInstence().zsetAddAall(key,range);
}
LOGGER.info("=====================跨服排行榜处理========,key:{}",key);
}
}
@ -74,14 +85,17 @@ public class CrossRankManager {
* @return
*/
private boolean isTime(){
long now = TimeUtils.now();
long twoHour = TimeUtils.HOUR * 2;
if (now >= twoHour+time){
time = now;
return true;
}else{
int group = GlobleSystemLogic.getInstence().getCrossGroup();
if (group == -1){
return false;
}
String key = RedisUtil.getInstence().getKey(RedisKey.CROSS_RANK_UPDATE, String.valueOf(group), false);
Object object = RedisUtil.getInstence().get(key);
if (object != null){
return false;
}
RedisUtil.getInstence().set(key,"1",TimeUtils.HOUR * 2);
return true;
}
/**

View File

@ -11,7 +11,6 @@ import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.ktbeans.ReportEventEnum;
import com.ljsd.jieling.ktbeans.ReportUtil;
import com.ljsd.jieling.logic.GlobleSystemLogic;
import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic;
import com.ljsd.jieling.logic.dao.Hero;
import com.ljsd.jieling.logic.dao.TeamEnum;
import com.ljsd.jieling.logic.dao.TeamPosHeroInfo;

View File

@ -163,10 +163,10 @@ public class MinuteTask extends Thread {
}
try {
CrossRankManager.getInstance().crossRankHandle(false);
CrossRankManager.getInstance().crossRankHandle();
}catch (Exception e){
e.printStackTrace();
LOGGER.error("跨服排行榜初始化一次Exception::=>{}",e.toString());
LOGGER.error("跨服排行榜初始化异常Exception::=>{}",e.toString());
}
try {