次の質問への答えのようなポイント数によってソートされた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)を返します。 }