@@ -67,6 +67,9 @@ public RankDemo(Jedis jedis) {
67
67
public RankElement getRankByMember (String member ) {
68
68
if (isRegionRankEnabled ) {
69
69
RankRegionElement element = getRankByMemberWithRegions (member );
70
+ if (element == null ) {
71
+ return null ;
72
+ }
70
73
return BeanUtil .toBean (element , RankElement .class );
71
74
} else {
72
75
// 排行榜采用不分区方案
@@ -137,16 +140,21 @@ public void saveRank(String member, double score) {
137
140
* @return /
138
141
*/
139
142
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 ;
148
150
}
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 );
150
158
}
151
159
152
160
/**
@@ -214,13 +222,15 @@ private void saveRankWithNoRegions(final String member, final double score) {
214
222
* @return /
215
223
*/
216
224
public RankRegionElement getRankByMemberWithRegions (String member ) {
217
- long totalRank = TOTAL_RANK_LENGTH ;
218
225
219
226
// pipeline 合并查询
220
- List <Response <Long >> responseList = new LinkedList <>();
227
+ List <Map < String , Response <?> >> responseList = new LinkedList <>();
221
228
Pipeline pipeline = jedis .pipelined ();
222
229
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 );
224
234
}
225
235
pipeline .syncAndReturnAll ();
226
236
@@ -231,18 +241,25 @@ public RankRegionElement getRankByMemberWithRegions(String member) {
231
241
232
242
// 处理 pipeline 查询结果
233
243
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 ;
241
249
}
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 );
242
260
}
243
261
244
- int lastRegionNo = getLastRegionNo ();
245
- return new RankRegionElement (lastRegionNo , getRankRedisKey (lastRegionNo ), member , null , null , totalRank );
262
+ return null ;
246
263
}
247
264
248
265
/**
0 commit comments