注文、およびソートの使用RedisTemplate ZSET応じ親指は時間を作成するには、2つの方法があります

次の質問への答えのようなポイント数によってソートされたRedisのアイデアを使用します。

1つの問題IDはすべての答えのリストを見つけます。
(ポイントランキング等)、キーは、IDの数、賞賛の値であり、図2は、IDがzset1に添加答え。
//ロング(K VAR1、セット<ZSetOperations.TypedTuple <V >> VAR2)を追加バルクを追加します。
2-2正解IDがでzset2ために加え、IDのキー、値はcreateTime.getLong(である);(時間ランキングを作成するために使用されます)。
答えはの親指(キャンセル)することにする3、
プラスまたはマイナス1の値で指定されたキーzset1を変更します。
4-1公表答えたときにzset1、zset2添加元素、
 //redisTemplate.opsForZSet().add(key,4565L,13);
要素が削除されたとき4-2削除します。
//redisTemplate.opsForZSet().remove(key,4565L)
図5は、ソートされたページデータを取得し、IDS回答結果。
材料の検索のためにキャッシュに対応する各回答IDに6回の反復のIDS。


    @Test 
   公共ボイドTEST2(){ 
      文字列キー= "mls_AnswerIdsByQuersionId:" + 123。
      。redisTemplate.opsForZSet()を追加(キー、234L、5); //添加单条

      redisTemplate.opsForZSet()(キー、4565L、13)を追加します。

      redisTemplate.opsForZSet()(キー、2345L、15)を追加します。

      設定する<ZSetOperations.TypedTuple <ロング>> var2の=新しいHashSetの<>(); 
      ZSetOperations.TypedTuple <ロング> answerVoInZset1 =新しいAnswerVoInZset(2345L、12); 
      ZSetOperations.TypedTuple <ロング> answerVoInZset2 =新しいAnswerVoInZset(5675L、16); 
      ZSetOperations.TypedTuple <ロング> answerVoInZset4 =新しいAnswerVoInZset(4565L、11); 
      var2.add(answerVoInZset1)。
      var2.add(answerVoInZset2)。
      VAR2。
      redisTempalte.opsForZSet()(キー、VAR2を追加 );. // バルク追加
      redisTemplate.opsForZSet()削除(キー、4565Lを );. // 個々の要素削除

      を設定し、<ロング> long型= redisTempalte.opsForZSet( )reverseRangeを(。 鍵、0 ,. 3)であり; 
   } 
//対象に嵩を追加、

   クラスAnswerVoInZset実装ZSetOperations.TypedTuple <ロング> { 
      ロングID、
      ダブルスコア; 
      公共AnswerVoInZset(ロングID、ダブルスコア){ 
         this.id ID =; 
         これは;スコア= .score 
      } 
      @Override 
      公衆ロングのgetValue(){ 
         戻りID; 
      } 
      @Override 
      公共ダブルgetScore(){ 
         戻りスコア; 
      }
      @Override 
      のcompareTo(ZSetOperations.TypedTuple <ロング> O){int型公共
         ; AnswerVoInZset O1 =(AnswerVoInZset)O 
         ;戻り新しい新しいダブル(this.score).compareTo(o1.getScore())
      } 
   } 
   //時間的順序(参照他人)
   @Resource(名前= "redisTemplate")
   プライベートredisTemplate <文字列、ロング> redisTempalte; 

   公共ボイドaddRecentBrowsingPosition(userIdを長い、長いpositionId){ 
      文字列のキー= "mls_AnswerIdsByQuersionId:" + 123; 
      //最近見たキャッシュされます位置
      zSetOperations <文字列、ロング> zSetOperations redisTempalte.opsForZSet =(); 
      //内部ZSETはスコアが現在時刻製スコアによって順序付けられている 
      zSetOperations.add(キー、positionId、のSystem.currentTimeMillis( ))。
      //環状構造--4、-3、-2、-1,0,1,2,3,4
      zSetOperations.removeRange(鍵、0、-6)。
   } 

   パブリックリスト<ロング> getRecentBrowsingPositionIds(長いUSERID){ 
      IF(userIdを<= 0){ 
         Collections.emptyListを返します()。
      } 
      //获取用户最近浏览的职位IDの
      文字列キー= "mls_AnswerIdsByQuersionId:" + 123。
      設定<ロング> positionIds = redisTempalte.opsForZSet()reverseRange(キー、0、4)。
      新しいのArrayList <>(positionIds)を返します。
   }

おすすめ

転載: www.cnblogs.com/zhuyeshen/p/11433857.html