Skip to content

Commit 9f69c6f

Browse files
committed
feat: 更新 Redis 示例
1 parent 7c791cd commit 9f69c6f

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

codes/javadb/javadb-redis/src/test/java/io/github/dunwu/javadb/redis/jedis/rank/RankDemo.java

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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
/**

codes/javadb/javadb-redis/src/test/java/io/github/dunwu/javadb/redis/jedis/rank/RankDemoTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public void testAdd() {
9595
RankElement rank1 = rank.getRankByMember(member1);
9696
RankElement rank2 = rank.getRankByMember(member2);
9797
Assertions.assertEquals(RankDemo.FIRST, rank1.getTotalRank());
98-
Assertions.assertEquals(RankDemo.TOTAL_RANK_LENGTH, rank2.getTotalRank());
98+
Assertions.assertNull(rank2);
9999
}
100100

101101

0 commit comments

Comments
 (0)