ITO評価学生側性能最適化——Redis


【事業背景】
    1.学生の抽選が遅い
    2.
学生側をしていると、学生が1つの問題をするたびにデータベースをトリガーし、データをデータベースに更新することに気づきました.このような学生側のフロントの応答は遅く、クリックするたびに1-2秒の遅延があります.そして学生が多いとき、どんどん1枚の表を変更して、みんな知っています.
【解決策】
(加Redis)
1.共用のものをRedisに入れる
2.先輩の意味は大体このようなもので、私が更新するたびに更新したデータベースではなく、Redisで、しばらくしてから内容をデータベースに提出しました.(どうせ原話はもう忘れてしまったんだから・・・)
【コード展示】
       1. 質問1について
    
    
 
実際には、抽出問題の共通部分を解決し、ドキュメントの詳細は簡単です.

     
     
     
     
/**
* :
* Redis
* , Redis , ,
**/
public void queryComponentById(HttpServletRequest request,
HttpServletResponse response) {
System.out.println(" ");
String perSortTypeId = request.getParameter("questionTypeId");
if (perSortTypeId == null || perSortTypeId.equals("")) {
return;
}
// jediscluster.del(perSortTypeId);
//
List<QuestionTypeDetail> questionTypesDetailList = new ArrayList<QuestionTypeDetail>();
String getQuestionTypeDetail=jediscluster.get(perSortTypeId);
if (getQuestionTypeDetail==null || getQuestionTypeDetail.equals("")) {
questionTypesDetailList = examPageBean.queryComponentById(perSortTypeId, dataBaseName);
if (questionTypesDetailList==null || questionTypesDetailList.equals("")) {
System.out.println(" ");
}else{
try {
jediscluster.set(perSortTypeId,JsonUtils.objectToJson(questionTypesDetailList));
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
JsonUtils.jsonToList(getQuestionTypeDetail, QuestionTypeDetail.class);
}
JacksonJsonUntil.beanToJson(response, questionTypesDetailList);
 

主に使用されるRedisのコード例:

     
     
     
     
// list
@RequestMapping("test4")
public void test4(HttpServletRequest request,
HttpServletResponse response) throws Exception {
jediscluster.set("listkey" ,JsonUtils.objectToJson(list));
}

      
      
      
      
// list
@RequestMapping("test6")
public void test6(HttpServletRequest request,
HttpServletResponse response) throws Exception {
List<EnrollStudent> enrollStudentList = new ArrayList<EnrollStudent>();
//
String json = jediscluster.get("listkey");
// json list
enrollStudentList = JsonUtils.jsonToList(json,EnrollStudent.class);
}

    2. 質問2について
    
昨日Redisに接触したばかりで、私はまだ単純で、すでにRedisの操作に対して、ドキュメントの上のGet、setの2つの方法しかありません.だから郭郭が私に、重名を言う时、データはカバーされて、私はテストして、そうではありませんか、そこで私は思い切って使います
perSortTypeIdはキー値として使用されます.
しかし、今日検索したところ、私が直接setしたためか、listストレージ構造を使えば、lpush()メソッドで簡単に問題を解決できるようになった.しかし、下位層のRedisパッケージに関するメソッドが少なすぎて、いろいろな変換をしているからだ.

     
     
     
     
/**
* id, id, id, ; ;
*
* :
* : Radis
* @param request
* @param response
*/
@RequestMapping("/queryStudentRecord")
public void queryStudentRecord(HttpServletRequest request,
HttpServletResponse response)
{
// id
String CourseId= examineeArrangement.getCourseId();
//
String StudentCode = examineeArrangement.getStudentId();
// id
String PaperId = examineeArrangement.getPaperMainId();
//
String DateBaseName = "itoo_exam";
//
// Radis _
List<PaperRecord> ListPaperRecord=new ArrayList<PaperRecord>();
String stuPaperRecord=examineeArrangement.getStudentId()+"ListPaperRecord";
// String getListPaperRecord=jediscluster.get(stuPaperRecord);
List<String> getListPaperRecord= jediscluster.lrange(stuPaperRecord, 0, jediscluster.llen(stuPaperRecord)-1); //lrange() stuPaperRecord key , list 。
if (getListPaperRecord==null || getListPaperRecord.equals("")||getListPaperRecord.size()==0) {
ListPaperRecord = paperRecordBean.queryAllStuPaperRecord(CourseId, StudentCode, PaperId, DateBaseName);
for (int i = 0; i < ListPaperRecord.size(); i++) {
PaperRecord enPR=ListPaperRecord.get(i);
try {
jediscluster.lpush(stuPaperRecord, JsonUtils.objectToJson(enPR));
} catch (IOException e) {
// TODO: Redis
e.printStackTrace();
}
}
}else{
// List<PaperRecord> changeRecord= (List<PaperRecord>)getListPaperRecord;
ListPaperRecord.clear();
for (int i = 0; i < getListPaperRecord.size(); i++) {
PaperRecord enPaRecord=JsonUtils.jsonToPojo(getListPaperRecord.get(i), PaperRecord.class);
ListPaperRecord.add(enPaRecord);
}
}
JacksonJsonUntil.beanToJson(response, ListPaperRecord);
}

     
     
     
     
    Redis
    list , ,
    list
//
List<PaperRecord> stuListPaperRecord=new ArrayList<PaperRecord>();
String stuPaperRecord=examineeArrangement.getStudentId()+"ListPaperRecord";
long count=jediscluster.llen(stuPaperRecord);// Redis
// stuListPaperRecord=JsonUtils.jsonToList(StrListPaperRecord,PaperRecord.class);
if (count==0) {
examPageBean.updatePaperRecord(studentAnswer, questionId, score,teacherCode, examineeArrangement);
}else{
// ,
for (long i = 0; i < count; i++) {
//TODO:
String strPR=jediscluster.lindex(stuPaperRecord, i);
// int i=(int)count;
// PaperRecord enPaperRecord=stuListPaperRecord.get(i);
// if (getEn.length()>0) {
// PaperRecord paperRecord=new PaperRecord();
PaperRecord paperRecord=JsonUtils.jsonToPojo(strPR, PaperRecord.class);
if (paperRecord.getQuestionContentId().equals(questionId)) {
paperRecord.setStudentAnswer(studentAnswer);
String jsonPaRecord;
try {
jsonPaRecord = JsonUtils.objectToJson(paperRecord);
jediscluster.lset(stuPaperRecord, i, jsonPaRecord);// Redis
System.out.println(" ");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

まとめ:
    
実は、私は「ボリュームを渡す」をクリックしたときにデータをデータベースに保存しました.
    
私のRedisはほんの少ししか使っていないような気がして、うまく利用できませんでした.これからは自分でもっと勉強する機会があって、夫と紅霞がいろいろな指導とアドバイスをしてくれたことに感謝します.
また、テクニカルドキュメントだけに依存しないでください.今回、私は明らかにドキュメントが私にビジネスの需要を満たすことができないことを感じて、自分の簡単な論理で処理しないで、まずネット上で良い方法があるかどうかを調べます.