From 024e339bc34648aca8ef1827125113eb512a52f3 Mon Sep 17 00:00:00 2001 From: zhangshanxue Date: Mon, 17 Aug 2020 22:31:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E6=9C=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/jieling/db/mongo/AreaManager.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 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 9724f8a00..c10debee6 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 @@ -171,9 +171,14 @@ public class AreaManager { if (System.currentTimeMillis() > execDate) { serverArenaInfoManagerCache = serverArenaInfoManager; int tmpAreaId = areaId; - boolean isSuccess = RedisUtil.getInstence().tryGetDistributedLock(RedisKey.ServerArenaJob, "", Integer.toString(newAreaId), 500); + boolean isSuccess = RedisUtil.getInstence().tryGetDistributedLock(RedisKey.ServerArenaJob, "", Integer.toString(newAreaId), 15000); + int i=0; + while (i<1000&&!isSuccess){ + i++; + isSuccess= RedisUtil.getInstence().tryGetDistributedLock(RedisKey.ServerArenaJob, "", Integer.toString(newAreaId), 15000); + } if (isSuccess) { - LOGGER.info(" serverArenaInfoManager get redis lock,the serverid={},the oldArea={},the newArea={}", GameApplication.serverId, areaId, newAreaId); + LOGGER.info(" serverArenaInfoManager get redis lock,the serverid={},the oldArea={},the newArea={},getlockTime{}", GameApplication.serverId, areaId, newAreaId,i); try { new Thread("sever_area_change") { @Override @@ -183,6 +188,8 @@ public class AreaManager { serverStateReset(); }catch (Exception e) { LOGGER.error(" serverArenaInfoManager get exception", e); + }finally { + RedisUtil.getInstence().releaseDistributedLock(RedisKey.ServerArenaJob,"", Integer.toString(newAreaId)); } } @@ -190,7 +197,7 @@ public class AreaManager { } catch (Exception e) { LOGGER.error(" serverArenaInfoManager get exception", e); } finally { - RedisUtil.getInstence().releaseDistributedLock(RedisKey.ServerArenaJob,"", Integer.toString(newAreaId)); + } } LOGGER.info(" serverArenaInfoManager not get redis lock,the serverid={},the oldArea={},the newArea={}", GameApplication.serverId, areaId, newAreaId); @@ -343,6 +350,12 @@ public class AreaManager { for(Map.Entry entry:guildInfoMap.entrySet()) { String newKey = RedisKey.getKey(RedisKey.C_Family_Name_Key, entry.getValue().getName(), true); + + if(newKey.startsWith(String.valueOf(areaId))){ + int length =newKey.length(); + newKey = newAreaId+newKey.substring(String.valueOf(areaId).length(),length); + } + Object extFamilyId = RedisUtil.getInstence().get(newKey); String tempName = newKey;