From 940740d8bc84d622a1ffe1dd7ab267a3bd99e747 Mon Sep 17 00:00:00 2001 From: duhui Date: Wed, 13 Jul 2022 16:32:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84redis=E7=9A=84=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jmfy/controller/LoginController.java | 4 +- .../jmfy/controller/ServerInfoController.java | 38 +++++++++++++++---- .../com/jmfy/dao/impl/ServerInfoDaoImpl.java | 6 +++ .../jmfy/redisProperties/RedisUserKey.java | 9 +++-- src/main/java/com/jmfy/utils/RedisUtil.java | 12 ++++++ 5 files changed, 57 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/jmfy/controller/LoginController.java b/src/main/java/com/jmfy/controller/LoginController.java index 151a368..1672eb7 100644 --- a/src/main/java/com/jmfy/controller/LoginController.java +++ b/src/main/java/com/jmfy/controller/LoginController.java @@ -35,6 +35,8 @@ public class LoginController { private CUserDao cUserDao; @Resource private ChannelInfoDao channelInfoDao; + @Resource + private ServerInfoController serverInfo; static final String ROOT = "root"; @@ -142,7 +144,7 @@ public class LoginController { } // 服务器数据同步 - ServerInfoController.oneRunServerGroup(); + serverInfo.oneRunServerGroup(); // 登陆成功,并添加session if (verify) { diff --git a/src/main/java/com/jmfy/controller/ServerInfoController.java b/src/main/java/com/jmfy/controller/ServerInfoController.java index fa97d87..d9c05cd 100644 --- a/src/main/java/com/jmfy/controller/ServerInfoController.java +++ b/src/main/java/com/jmfy/controller/ServerInfoController.java @@ -108,6 +108,7 @@ public class ServerInfoController { public void onstart(){ // 定时任务延迟1分钟执行,每隔俩小时执行一次 TaskKit.scheduleAtFixedRate(this::refreshCache,10,7200,TimeUnit.SECONDS); + LOGGER.info("服务器缓存刷新定时器启动"); } /** @@ -600,14 +601,28 @@ public class ServerInfoController { } /** - * 只会执行一次,同步游戏服跨服分组到gm,之后会以gm的为准 + * 登陆账号执行 */ - public static void oneRunServerGroup(){ - Map map = RedisUtil.getInstence().getMap(RedisUserKey.CROSS_SERVER_GROUP + ":", Integer.class, -1); - if (map == null || map.isEmpty()){ - Map map1 = RedisUtil.getInstence().getMap(RedisUserKey.SERVER_SPLIT_INFO + ":", Integer.class, -1); - RedisUtil.getInstence().putMap(RedisUserKey.CROSS_SERVER_GROUP,"",map1); - LOGGER.info("同步跨服id完成"); + public void oneRunServerGroup(){ + try { + // 服务器状态 + List serverInfo = serverInfoDao.getAllServerInfo(); + RedisUtil.getInstence().del(RedisUserKey.getKey(RedisUserKey.SERVER_STATE,"",0)); + for (ServerInfo info : serverInfo) { + registerServerState(info.getServer_id(),info.getStatus()); + } + LOGGER.info("同步服务器状态完成"); + + + // 跨服id + Map map = RedisUtil.getInstence().getMap(RedisUserKey.CROSS_SERVER_GROUP + ":", Integer.class, -1); + if (map == null || map.isEmpty()){ + Map map1 = RedisUtil.getInstence().getMap(RedisUserKey.SERVER_SPLIT_INFO + ":", Integer.class, -1); + RedisUtil.getInstence().putMap(RedisUserKey.CROSS_SERVER_GROUP,"",map1); + LOGGER.info("同步跨服id完成"); + } + } catch (Exception e) { + e.printStackTrace(); } } @@ -630,4 +645,13 @@ public class ServerInfoController { public static void updateGmGroupId(String serverId, int groupId){ RedisUtil.getInstence().putMapEntry(RedisUserKey.CROSS_SERVER_GROUP,"",serverId,String.valueOf(groupId),-1); } + + /** + * 注册服务器状态 + * @param serverId + * @param state + */ + public static void registerServerState(String serverId, String state){ + RedisUtil.getInstence().putMapEntry(RedisUserKey.SERVER_STATE,"",serverId,state,-1); + } } diff --git a/src/main/java/com/jmfy/dao/impl/ServerInfoDaoImpl.java b/src/main/java/com/jmfy/dao/impl/ServerInfoDaoImpl.java index 6d8692a..e4b0f39 100644 --- a/src/main/java/com/jmfy/dao/impl/ServerInfoDaoImpl.java +++ b/src/main/java/com/jmfy/dao/impl/ServerInfoDaoImpl.java @@ -118,6 +118,8 @@ public class ServerInfoDaoImpl implements ServerInfoDao { MongoTemplate mongoTemplate = connect.getMongoTemplete(dbName); Query query = new Query(Criteria.where("server_id").is(serverInfo.getServer_id())); mongoTemplate.updateMulti(query, update, ServerInfo.class); + + ServerInfoController.registerServerState(serverInfo.getServer_id(),serverInfo.getStatus()); } @Override @@ -125,6 +127,8 @@ public class ServerInfoDaoImpl implements ServerInfoDao { MongoTemplate mongoTemplate = connect.getMongoTemplete(dbName); //有则更新,没有则新增 mongoTemplate.insert(serverInfo, "server_info"); + + ServerInfoController.registerServerState(serverInfo.getServer_id(),serverInfo.getStatus()); } /** @@ -171,6 +175,8 @@ public class ServerInfoDaoImpl implements ServerInfoDao { MongoTemplate mongoTemplate = connect.getMongoTemplete(dbName); Query query = new Query(Criteria.where("server_id").is(server_id)); mongoTemplate.updateMulti(query, update, ServerInfo.class); + + ServerInfoController.registerServerState(server_id,status); } @Override diff --git a/src/main/java/com/jmfy/redisProperties/RedisUserKey.java b/src/main/java/com/jmfy/redisProperties/RedisUserKey.java index 49f885a..5c4b3d9 100644 --- a/src/main/java/com/jmfy/redisProperties/RedisUserKey.java +++ b/src/main/java/com/jmfy/redisProperties/RedisUserKey.java @@ -35,6 +35,8 @@ public class RedisUserKey { public static final String SERVER_SPLIT_INFO = "SERVER_SPLIT_INFO";//游戏服跨服分组,实时生效,gm不要修改这个key参数 public static final String CROSS_SERVER_GROUP = "CROSS_SERVER_GROUP";//gm跨服分组,每周一重新分组生效 + + public static final String SERVER_STATE = "SERVER_STATE";//服务器状态 /** * 在线人数 updata/min */ @@ -45,11 +47,10 @@ public class RedisUserKey { public static final String GAME_PAY_URL = "GAME_PAY_URL:"; public static String getKey(String type, String key, int serverId) { - if (serverId!=0) { - return serverId + Delimiter_colon + type + Delimiter_colon + key; + if (serverId==0) { + return type + Delimiter_colon + key; } - return type + Delimiter_colon + key; - + return serverId + Delimiter_colon + type + Delimiter_colon + key; } } diff --git a/src/main/java/com/jmfy/utils/RedisUtil.java b/src/main/java/com/jmfy/utils/RedisUtil.java index 6a2e70d..2d630eb 100644 --- a/src/main/java/com/jmfy/utils/RedisUtil.java +++ b/src/main/java/com/jmfy/utils/RedisUtil.java @@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory; import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ZSetOperations; +import org.springframework.util.CollectionUtils; import java.util.HashMap; import java.util.List; @@ -194,6 +195,17 @@ public class RedisUtil { } } + /** + * 删除缓存 + * @param key + */ + public void del(String key) { + Boolean bol = redisObjectTemplate.hasKey(key); + if (bol){ + redisObjectTemplate.delete(key); + } + } + /** * 获取Map *