diff --git a/src/main/java/com/ljsd/controller/GetUserController.java b/src/main/java/com/ljsd/controller/GetUserController.java index ccb2569..aa45865 100644 --- a/src/main/java/com/ljsd/controller/GetUserController.java +++ b/src/main/java/com/ljsd/controller/GetUserController.java @@ -13,7 +13,8 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.IOException; +import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -151,32 +152,38 @@ public class GetUserController extends HttpServlet { int uid = 0; //加分布式锁 List userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject); - try{ + if (userInfos.size() == 0) { + try{ boolean getLock=false; - while(!getLock){ - getLock = BaseGlobal.getInstance().redisApp.tryGetDistributedLock(RedisKey.REGISTER_LOCK, "", "get", 800); - if (getLock&&userInfos.size() == 0) { - DBObject next = server_info.iterator().next(); - Object register_state = next.get("register_state"); - if(register_state!=null&& register_state.equals("0")){ - returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏"); - return; + while(!getLock){ + getLock = BaseGlobal.getInstance().redisApp.tryGetDistributedLock(RedisKey.REGISTER_LOCK, "", "get", 800); + if(getLock){ + userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject); + //双重校验 + if (userInfos.size() == 0) { + DBObject next = server_info.iterator().next(); + Object register_state = next.get("register_state"); + if(register_state!=null&& register_state.equals("0")){ + returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏"); + return; + } + uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000; + dbObject.put("uid", uid); + dbObject.put("_id", uid); + userInfos.add(dbObject); + if (gid != null && !gid.isEmpty()) { + dbObject.put("gid", gid); + } + if (pid != null && !pid.isEmpty()) { + dbObject.put("pid", pid); + } + BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject); + } } - uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000; - dbObject.put("uid", uid); - dbObject.put("_id", uid); - userInfos.add(dbObject); - if (gid != null && !gid.isEmpty()) { - dbObject.put("gid", gid); - } - if (pid != null && !pid.isEmpty()) { - dbObject.put("pid", pid); - } - BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject); } + }finally { + BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get"); } - }finally { - BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get"); } Random random = new Random(); int utoken = Math.abs(random.nextInt());