diff --git a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java index a4d2ef413..5c0d017fc 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/db/redis/RedisKey.java @@ -317,6 +317,8 @@ public class RedisKey { //玉虚论道 public static final String CROSS_YUXULUNDAO_RANK = "CROSS_YUXULUNDAO_RANK";//排行榜信息 废弃 public static final String CROSS_YUXULUNDAO_RANK_PERSON = "CROSS_YUXULUNDAO_RANK_PERSON";//排行榜信息 + public static final String CROSS_YUXULUNDAO_SEASON_LOCK = "CROSS_YUXULUNDAO_SEASON_LOCK";//玉虚论道赛季结算锁 + public static final String CROSS_YUXULUNDAO_SEASON_LOCK_MARK = "CROSS_YUXULUNDAO_SEASON_LOCK_MARK";//玉虚论道赛季结算锁标识,记录结算的分组和服务器id public static final String CROSS_YUXULUNDAO_ROBOT_INFO = "CROSS_YUXULUNDAO_ROBOT_INFO";//机器人信息 public static final String CROSS_YUXULUNDAO_RECORD = "CROSS_YUXULUNDAO_RECORD";//战斗回放 public static final String CROSS_SERVER_USER = "CROSS_SERVER_USER";//redis存储个人基本信息 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java index 3e3049da5..6349588ee 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/CrossYuxulundaoLogic.java @@ -1,5 +1,6 @@ package com.ljsd.jieling.logic.arena; +import com.ljsd.GameApplication; import com.ljsd.fight.ArenaRecord; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -99,6 +100,11 @@ public class CrossYuxulundaoLogic { if (crossGroup == -1) { return; } + //分布式锁,保证一个组只有一个服进行结算 + boolean lock = RedisUtil.getInstence().lock(RedisKey.CROSS_YUXULUNDAO_SEASON_LOCK + RedisKey.Delimiter_colon + crossGroup, TimeUtils.ONE_HOUR); + if (!lock) { + return; + } String title = SErrorCodeEerverConfig.getI18NMessage("MsRankTitle"); String rkey = RedisUtil.getInstence().getKeyLocal(RedisKey.CROSS_YUXULUNDAO_RANK_PERSON, Integer.toString(crossGroup)); Set arenaRank = RedisUtil.getInstence().getReverseZset(rkey, 0, -1); @@ -115,6 +121,10 @@ public class CrossYuxulundaoLogic { e.printStackTrace(); } } + //记录结算的组id和服务器id,保留3天 + String lockMark = RedisKey.CROSS_YUXULUNDAO_SEASON_LOCK_MARK; + RedisUtil.getInstence().set(lockMark, crossGroup + "_" + GameApplication.serverId); + RedisUtil.getInstence().expireMills(lockMark, TimeUtils.DAY * 3); } public int getSeason() {