双重校验注册

master
lvxinran 2021-08-10 10:28:04 +08:00
parent f28de9e226
commit 3f28e276fc
1 changed files with 30 additions and 23 deletions

View File

@ -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,11 +152,15 @@ public class GetUserController extends HttpServlet {
int uid = 0;
//加分布式锁
List<DBObject> userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
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) {
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")){
@ -175,9 +180,11 @@ public class GetUserController extends HttpServlet {
BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
}
}
}
}finally {
BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get");
}
}
Random random = new Random();
int utoken = Math.abs(random.nextInt());
uid = (int) userInfos.get(0).get("uid");