@@ -67,6 +67,9 @@ public RankDemo(Jedis jedis) {
6767 public RankElement getRankByMember (String member ) {
6868 if (isRegionRankEnabled ) {
6969 RankRegionElement element = getRankByMemberWithRegions (member );
70+ if (element == null ) {
71+ return null ;
72+ }
7073 return BeanUtil .toBean (element , RankElement .class );
7174 } else {
7275 // 排行榜采用不分区方案
@@ -137,16 +140,21 @@ public void saveRank(String member, double score) {
137140 * @return /
138141 */
139142 public RankElement getRankByMemberWithNoRegions (String member ) {
140- Long rank = jedis .zrevrank (RANK , member );
141- if (rank != null ) {
142- Set <Tuple > tuples = jedis .zrevrangeWithScores (RANK , rank , rank );
143- for (Tuple tuple : tuples ) {
144- if (tuple .getElement ().equals (member )) {
145- return new RankElement (member , tuple .getScore (), rank );
146- }
147- }
143+ Pipeline pipeline = jedis .pipelined ();
144+ Response <Long > rankResponse = pipeline .zrevrank (RANK , member );
145+ Response <Double > scoreResponse = pipeline .zscore (RANK , member );
146+ pipeline .syncAndReturnAll ();
147+
148+ if (rankResponse == null || scoreResponse == null ) {
149+ return null ;
148150 }
149- return new RankElement (member , null , TOTAL_RANK_LENGTH );
151+
152+ Long rank = rankResponse .get ();
153+ Double score = scoreResponse .get ();
154+ if (rank == null || score == null ) {
155+ return null ;
156+ }
157+ return new RankElement (member , score , rank );
150158 }
151159
152160 /**
@@ -214,13 +222,15 @@ private void saveRankWithNoRegions(final String member, final double score) {
214222 * @return /
215223 */
216224 public RankRegionElement getRankByMemberWithRegions (String member ) {
217- long totalRank = TOTAL_RANK_LENGTH ;
218225
219226 // pipeline 合并查询
220- List <Response <Long >> responseList = new LinkedList <>();
227+ List <Map < String , Response <?> >> responseList = new LinkedList <>();
221228 Pipeline pipeline = jedis .pipelined ();
222229 for (RankRegion region : REGIONS ) {
223- responseList .add (pipeline .zrevrank (region .getRegionKey (), member ));
230+ Map <String , Response <?>> map = new HashMap <>(2 );
231+ map .put ("rank" , pipeline .zrevrank (region .getRegionKey (), member ));
232+ map .put ("score" , pipeline .zscore (region .getRegionKey (), member ));
233+ responseList .add (map );
224234 }
225235 pipeline .syncAndReturnAll ();
226236
@@ -231,18 +241,25 @@ public RankRegionElement getRankByMemberWithRegions(String member) {
231241
232242 // 处理 pipeline 查询结果
233243 for (int i = 0 ; i < responseList .size (); i ++) {
234- Response <Long > response = responseList .get (i );
235- if (response != null && response .get () != null ) {
236- Long rank = response .get ();
237- RankRegion region = REGIONS .get (i );
238- totalRank = getTotalRank (region .getRegionNo (), rank );
239- return new RankRegionElement (region .getRegionNo (), region .getRegionKey (), member , null , rank ,
240- totalRank );
244+ Map <String , Response <?>> map = responseList .get (i );
245+ Response <?> rankResponse = map .get ("rank" );
246+ Response <?> scoreResponse = map .get ("score" );
247+ if (rankResponse == null && scoreResponse == null ) {
248+ continue ;
241249 }
250+
251+ Long rank = (Long ) rankResponse .get ();
252+ Double score = (Double ) scoreResponse .get ();
253+ if (rank == null || score == null ) {
254+ continue ;
255+ }
256+
257+ RankRegion region = REGIONS .get (i );
258+ long totalRank = getTotalRank (region .getRegionNo (), rank );
259+ return new RankRegionElement (region .getRegionNo (), region .getRegionKey (), member , score , rank , totalRank );
242260 }
243261
244- int lastRegionNo = getLastRegionNo ();
245- return new RankRegionElement (lastRegionNo , getRankRedisKey (lastRegionNo ), member , null , null , totalRank );
262+ return null ;
246263 }
247264
248265 /**
0 commit comments