一、地図======= boundHashOps
(1)メイン方法、Redisのうちマップ記憶の値
@Resource プライベート RedisTemplate <文字列、オブジェクト> redisTemplate。 プライベート 静的 最終長いEXPIRED_MINUTEは= 新しいロング(1 ); プライベート 静的な 最終文字列HUM_NUM_KEY =「HUM_NUM_」。 // 统计医师人文医学测评次数 @RequestMapping( "/ hum_num" ) 公衆 @ResponseBody ApiResult getDoctorHumnum(@RequestParam地図の<string、オブジェクト> paramMap){ paramMap.put( "ORGS"、この.getOrganization())。 地図 <文字列、オブジェクト>結果= Maps.newHashMap()。 文字列のキー = この.generateKey(HUM_NUM_KEY、paramMap)。 もし(この.isExistInRedis(キー)){ 結果 = この.getMapFromRedis(キー)。 } 他{ 結果 = doctorInfoService.selectDoctorHumNum(paramMap)。 この.putMapToRedis(キー、結果); } 戻りApiResult.success(結果)。 }
(2)設定キー値
プライベート文字列generateKey(文字列の接頭辞、地図<文字列、オブジェクト> paramMap){ リターン接頭辞 +(paramMap.get( "orgUuid")== nullの "?":paramMap.get( "orgUuid" ).toString()) + " _」 +(paramMap.get( "cycleId")== nullの? "":paramMap.get( "cycleId" ).toString()); }
注:上記セット識別キーは、実際の文字列であり、この文字列は、Redisの内部鍵として記憶されます
(3)キーが存在するかどうかを決定します
プライベート ブールisExistInRedis(文字列キー){ リターン?redisTemplate.boundHashOps(キー).size()== 0 はfalse:trueに; // なお、そのストレージがハッシュ内容ですので、私たちは地図を挿入しているため。 }
(4)が格納されているRedisの間の値を取得します
プライベート地図<文字列、オブジェクト> getMapFromRedis(文字列キー){ // ツールのここグアバ使用、ある程度を使用した場合、一般的なHasMap誤動作の作成を簡素化し、 地図<文字列、オブジェクト> =結果Maps.newHashMapを(); 地図 <オブジェクト、オブジェクト> = redisTemplate.boundHashOpsマップ(キー).entries(); // キー地図ゲット // 地図を横断する ため(のMap.Entry <オブジェクト、オブジェクト>のエントリ:EnumMap.entrySet( )){ result.put(entry.getKey()のtoString()、entry.getValue());. } 戻り結果; }
(5)Redisのうち挿入方法にマップの値
プライベート 無効 putMapToRedis(文字列のキーマップ<?、?> マップ){ redisTemplate.boundHashOps(キー).putAll(マップ); // 有効期限を設定し、数分で redisTemplate.boundHashOps(キー).expire(EXPIRED_MINUTE、 TimeUnitで。 分); }
二、オブジェクト======== boundVauleOps
(1)メインメソッド
@Resource プライベート RedisTemplate <文字列、オブジェクト> redisTemplate。 @RequestMapping( "/統計" ) @ResponseBody 公衆 ApiResult統計(@RequestParam地図の<string、オブジェクト> paramMap){ 文字列キー = この.generateKey(PERIDIC_STATISTIC_TAB3_KEY、paramMap)。 StatisticGroupResult統計 = nullを。 もし(isExistStringInRedis(キー)){ 統計値 = (StatisticGroupResult)redisTemplate.boundValueOps(キー)に.get(); } 他{ 統計 =operateService.selectStatisticGroup(paramMap)。 redisTemplate.boundValueOps(キー).SET(統計、EXPIRED_MINUTE、TimeUnit.MINUTES)。 } 戻りApiResult.success(統計)。 }
(2)キーの値が存在するかどうかを決定します
//は、String型のキーの値が存在するか否かを判断する 専用 ブールisExistStringInRedis(文字列キー){ リターン?RedisTemplate.boundValueOps(キー).size()== 0 はfalse:trueには; }
そこに何かがあると地図が共通で使用されることに注意してください
三、リスト============ boundListOps
(1)メインメソッド
// 使用的都是文字列、オブジェクト方式 @Resource プライベート RedisTemplate <文字列、オブジェクト> redisTemplate。 @RequestMapping( "/ periodic_list" ) @ResponseBody 公共 ApiResult periodicList(@RequestParam地図の<string、オブジェクト> paramMap){ 文字列キー = この.generateKey(PERIDIC_TAB3_KEY、paramMap)。 一覧 <PeriodicExamineResult>結果= 新しい ArrayListを<> (); もし(isExistListInRedis(キー)){ リスト <OBJECT>リスト= redisTemplate.boundListOps(キー).range(0、-1 ); ために(INTは私= 0; I <はlist.size(); I ++ ){ result.add((PeriodicExamineResult)list.get(I))。 } } 他{ 結果 = operateService.queryPeriodicExamineList(paramMap)。 用(PeriodicExamineResult温度:結果){ redisTemplate.boundListOps(キー).leftPush(TEMP)。 redisTemplate.boundListOps(キー).expire(EXPIRED_MINUTE、TimeUnit.MINUTES)。 } } 戻りApiResult.success(結果)。 }
値(2)リストの中があるか否かを判定する
//は、キー値のリストのタイプが存在する決定 プライベート ブールisExistListInRedis(文字列のキー){ リターン?redisTemplate.boundListOps(キー).size()== 0 falseにする:trueに; }
四、当RedisTemplate <文字列、リスト<... >> redisTemplate。
@Resource プライベート RedisTemplate <文字列、リスト<PeriodicExamineResult >> redisTemplate。 @ org.junit.Test 公共 無効TEST4(){ 文字列のキー = "LI_HAO"。// 设置キー 一覧<PeriodicExamineResult>結果= 新しい ArrayListを<> (); 地図 <文字列、オブジェクト> paramMap = Maps.newHashMap(); 結果 = operateService.queryPeriodicExamineList(paramMap)。 redisTemplate.boundListOps(キー).leftPush(結果); // 将获取的結果放到Redisの当中 redisTemplate.boundListOps(キー).expire(10、TimeUnit.MINUTES)。// 時刻設定 リスト <リスト<見る>> PeriodicExamineResult = redisTemplate.boundListOps(キー).Range(1、-1); // うち取得のRedisに格納されているの値 のために(PeriodicExamineResult RES:List.get(0 ) ){ System.out.printlnは(res.getTotal()); } }
注:範囲(1、-1)リスト内のトラバースすべての項目を示しています。一覧がリスト内に受信されなければならないので、我々が挿入されているので。したがって、list.get(0)を使用して挿入されたのリストを取得するように
ページングを使用しているときにこの問題が発生した場合第五は、その後、我々は、手動でリストに着手する、ページを書くことができます
// 它所使用的模板同上面使用的一样为: @Resource プライベート RedisTemplate <文字列、オブジェクト> redisTemplate。 @RequestMapping( "/ examine_result_search" ) @ResponseBody 公共 JQGirdPageResult examineResultSearch(@RequestParam地図の<string、オブジェクト> paramMap、@ModelAttribute PageBean pageBean){ 文字列キー = この.generateKey(PERIDIC_EXAMINE_TAB4_KEY、paramMap)。 一覧 <PeriodicExaminePageResult>結果= 新しい ArrayListを<> (); もし(isExistListInRedis(キー)){ 一覧<オブジェクト>リスト= redisTemplate.boundListOps(キー).range(0、-1 ); 以下のために(INT ; I <はlist.size(); iが0 = I ++ ){ result.add((PeriodicExaminePageResult)list.get(I))。 } ロング合計 = Long.valueOf(result.size())。 整数のpageSize = pageBean.getRows()。 整数ページ = pageBean.getPage(); JQGirdPageResult jqGirdPageResult = 新しいJQGirdPageResult(); 整数TOTALPAGEは pageSizeを== 0合計%を=?total.intValue()/のpageSize:total.intValue()/ + 1のpageSize。 jqGirdPageResult.setTotal(TOTALPAGE?== 0 1 :TOTALPAGE)。 jqGirdPageResult.setPage(ページ)。 jqGirdPageResult.setRows(結果)。 jqGirdPageResult.setRecords(合計)。 返すjqGirdPageResultを。 } 他{ 結果 = operateService.queryPeriodicPageList(paramMap)。 用(PeriodicExaminePageResult温度:結果){ redisTemplate.boundListOps(キー).leftPush(TEMP)。 redisTemplate.boundListOps(キー).expire(EXPIRED_MINUTE、TimeUnit.MINUTES)。 } ロング合計 =Long.valueOf(result.size())。 整数のpageSize = pageBean.getRows()。 整数ページ = pageBean.getPage(); JQGirdPageResult jqGirdPageResult = 新しいJQGirdPageResult(); 整数TOTALPAGEは pageSizeを== 0合計%を=?total.intValue()/のpageSize:total.intValue()/のpageSize + 1 。 jqGirdPageResult.setTotal(TOTALPAGE?== 0 1 :TOTALPAGE)。 jqGirdPageResult.setPage(ページ)。 jqGirdPageResult.setRows(結果)。 jqGirdPageResult.setRecords(合計)。 返すjqGirdPageResultを。 } }