你的位置:首页 > 软件开发 > Java > Servlet 服务器性能提高

Servlet 服务器性能提高

发布时间:2016-10-06 01:00:08
首先我要说下我实现这个功能接口涉及到的业务和实现的详细流程,然后会说此接口涉及到的相关技术,最后会贴出注释后的详细代码, 这个接口涉及到的是 app上咻一咻功能,咻一咻中奖的奖品一共有七类,其中四类是兑换券的兑换额,另外三类是咻一咻提升中奖几率的功能券,前四类兑换券当玩家咻到 ...

Servlet 服务器性能提高

          首先我要说下我实现这个功能接口涉及到的业务和实现的详细流程,然后会说此接口涉及到的相关技术,最后会贴出注释后的详细代码, 这个接口涉及到的是 app上咻一咻功能,咻一咻中奖的奖品一共有七类,其中四类是兑换券的兑换额,另外三类是咻一咻提升中奖几率的功能券,前四类兑换券当玩家咻到之后就必须去访问数据库更新对应玩家兑换券额度,而且这频率是非常高的。就应为这点,所以我今天想了这个能够对接口进行减压的方法。

一、实现流程

               首先数据库中有个单独的兑换券表,表的结构为:自增id=主键,用户的登录id=外建,4类券的值以一个json的格式的字符串存放到表中的一个字段中,那么现在该表一共就有3个字段(自增id,外建id,json格式的兑换券array),下面我截该表的图出来。

Servlet 服务器性能提高

 这些数据都是通过单例模式调用缓存中的数据进行更新或则插入的。下面我上流程图。

 Servlet 服务器性能提高

二、使用技术

        单例模式、缓存、timer线程控制、数据处理使用JSONArray+JSONObject.

三、代码

      1、servlet部分    

Servlet 服务器性能提高Servlet 服务器性能提高
 1 package Servlet; 2  3 import java.io.IOException; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.util.Date;  7 import java.util.Timer;  8 import java.util.TimerTask;  9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import javax.servlet.http.HttpSession; 15  16 import org.json.JSONArray; 17 import org.json.JSONException; 18 import org.json.JSONObject; 19  20 import Helper.MySqlHepler; 21 import Helper.ResultToJsonTool; 22 import Helper.ShareSingleton; 23  24 @WebServlet("/GamesXiuXiuServlet") 25 public class GamesXiuXiuServlet extends HttpServlet { 26    27   private static final long serialVersionUID = 1L; 28   protected final String USER_AGENT = "Mozilla/5.0"; 29   public GamesXiuXiuServlet() { 30     super(); 31     // TODO Auto-generated constructor stub 32   } 33  34   @SuppressWarnings("null") 35   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 36   37      38    response.setContentType( "text/html"); 39     response.setCharacterEncoding("utf-8");  40     request.setCharacterEncoding("utf-8");  41    42     String token; 43     String account; 44     String[] mysqlParameter;  45    46      JSONObject returnJsonObject; //LoadType 47       48      String CheckToken=null; 49       ResultSet returnData; 50      String Type; 51      52      JSONArray returnJsonArray; 53      String ReplaceStr; 54      HttpSession session ; 55       JSONObject SessionSaveDic; 56       57     Type=request.getParameter("type");  58     account=request.getParameter("account");   59      60     token=request.getParameter("token");   61      try { 62         CheckToken= ShareSingleton.getInstance().UsrTokenDictionary.getString(account); 63           64        } catch (JSONException e2) { 65          e2.printStackTrace(); 66        } 67       68     if(!token.equals(CheckToken)) 69      { 70        71        returnJsonObject =new JSONObject(); 72          73           try { 74           returnJsonObject.put("GetType", "4"); 75             returnJsonObject.put("Success", "0"); 76             returnJsonObject.put("Msg","token错误,请重新登录!"); 77          } catch (JSONException e) { 78             79            e.printStackTrace(); 80          } 81          82            83           response.getWriter().println(returnJsonObject.toString()); 84            85           return; 86      } 87     if(Type.equals("2")) //更新 88       {   89        90     ReplaceStr=request.getParameter("replaceJsonStr"); 91     session = request.getSession();  92      SessionSaveDic=(JSONObject)session.getAttribute("allMemberDuiHuanKaListData"); 93     try { 94       /*先修改缓存,然后一个timer控件对数据库做间歇性的修改*/ 95     SessionSaveDic.put(account, ReplaceStr); 96     session.setAttribute("allMemberDuiHuanKaListData", SessionSaveDic); 97        //设置sessio 永不过期 98     ShareSingleton.getInstance().UpdateDuiHuanKaDictionary=SessionSaveDic; 99     session.setMaxInactiveInterval(-1);100     101   } catch (JSONException e2) {102     // TODO Auto-generated catch block103     e2.printStackTrace();104   }105    106             returnJsonObject =new JSONObject();107              try {108              109              returnJsonObject.put("GetType", "3");110              returnJsonObject.put("Success", "1");111              returnJsonObject.put("Msg", "修改成功");112               113            } catch (JSONException e) {114          115            e.printStackTrace();116      }117             118     response.getWriter().println(returnJsonObject.toString());119             120      121       }122     //查询出游戏表当前所有数据123     else if(Type.equals("3"))124     {125        session = request.getSession(); 126        //这个值也会自动设置为空  由于咻咻玩的人比较多,所以将抵扣券的组合json放在内存中,然后使用时间间隔方式 更新数据库127         SessionSaveDic=(JSONObject)session.getAttribute("allMemberDuiHuanKaListData");128       129       if (SessionSaveDic != null) { 130       131           String SinglePeopleJson=SessionSaveDic.optString(account);132           if(SinglePeopleJson!="")133           {134            try {135             String JsonListData= SessionSaveDic.getString(account);136             137               returnJsonArray=new JSONArray(JsonListData)  ;138               returnJsonObject =new JSONObject();139                140                 returnJsonObject.put("Rows", returnJsonArray);141                 returnJsonObject.put("GetType", "0");142                 returnJsonObject.put("Success", "1");143                 response.getWriter().println(returnJsonObject.toString());144               145           } catch (JSONException e1) {146             // TODO Auto-generated catch block147             e1.printStackTrace();148           }149            150          151          }152           else//下面就去数据库总查询153            {154            //如果缓存中没有就从数据库中取出来,然后再修改155            mysqlParameter=new String[]{account};156              returnData=MySqlHepler.executeQueryT("select deductionCard from deductionCardSheet where account=?", mysqlParameter);157                   158               try {159                  returnJsonObject =new JSONObject();160                  returnJsonArray=ResultToJsonTool.resultSetToJsonArry(returnData);161                  162                JSONObject tempObject=returnJsonArray.getJSONObject(0);163                164                 165                 166                String JsonList = tempObject.getString("deductionCard");167                returnJsonArray=new JSONArray(JsonList)  ;168                 169                  returnJsonObject.put("Rows", returnJsonArray);170                  returnJsonObject.put("GetType", "0");171                  returnJsonObject.put("Success", "1");172                  173                   SessionSaveDic.put(account, returnJsonArray);174                175                  session.setAttribute("allMemberDuiHuanKaListData", SessionSaveDic);176                  //设置sessio 永不过期177                 ShareSingleton.getInstance().UpdateDuiHuanKaDictionary=SessionSaveDic;178                179                ShareSingleton.getInstance().KeysArray.put(account);180               session.setMaxInactiveInterval(-1);181                  response.getWriter().println(returnJsonObject.toString());182               } catch (SQLException | JSONException e1) {183                 184                185                 e1.printStackTrace();186               }187            }188            return;189          } else{ 190           191             //如果缓存中没有就从数据库中取出来,然后再修改192            mysqlParameter=new String[]{account};193            returnData=MySqlHepler.executeQueryT("select deductionCard from deductionCardSheet where account=?", mysqlParameter);194                 195             try {196                returnJsonObject =new JSONObject();197                returnJsonArray=ResultToJsonTool.resultSetToJsonArry(returnData);198                JSONObject tempObject=returnJsonArray.getJSONObject(0);199               String JsonList = tempObject.getString("deductionCard");200               returnJsonArray=new JSONArray(JsonList)  ;201               202                returnJsonObject.put("Rows", returnJsonArray);203                returnJsonObject.put("GetType", "0");204                returnJsonObject.put("Success", "1");205               SessionSaveDic=new JSONObject();206               SessionSaveDic.put(account, returnJsonArray);207                session.setAttribute("allMemberDuiHuanKaListData", SessionSaveDic);208                //设置sessio 永不过期209               ShareSingleton.getInstance().UpdateDuiHuanKaDictionary=SessionSaveDic;210               211             synchronized(this) {212              //一次只能有一个线程进入213              ShareSingleton.getInstance().KeysArray.put(account);214             ShareSingleton.getInstance().TastIsOrNoRun=1;215             }216             session.setMaxInactiveInterval(-1);217                response.getWriter().println(returnJsonObject.toString());218             } catch (SQLException | JSONException e1) {219               220              221               e1.printStackTrace();222             }223            224          }225     }226    227   228   }229 230   231   232   233 234 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Servlet 服务器性能提高

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录