当分数相同时,根据创建时间来排名,谁创建的早排在前面,
设置maxtime = 9999999999999L来作为最大时间。
public static Jedis getJedis() {
JedisPool pool = new JedisPool("127.0.0.1",6379);
Jedis jedis = pool.getResource();
return jedis;
}
public static void main(String[] args) {
Jedis jedis = getJedis();
long maxtime = 9999999999999L;
double socre1 = Double.valueOf(1+""+(maxtime-System.currentTimeMillis()));
double socre2 = Double.valueOf(22+""+(maxtime-1538657994000L));
double socre3 = Double.valueOf(22+""+(maxtime-1539657994000L));
jedis.zadd("rank_demo", socre1, "a");
jedis.zadd("rank_demo", socre2, "b");
jedis.zadd("rank_demo", socre3, "c");
/** 能够按名次查询排名前N名的玩家 */
Set<Tuple> zrange = jedis.zrevrangeWithScores("rank_demo", 0, 2);
for(Tuple range:zrange) {
System.out.println("db score:"+range.getScore()+" member:"+range.getElement());
System.out.println("real score:"+printRealSocre(range.getScore()));
}
}
private static String printRealSocre(double score) {
String scoreStr = String.valueOf((long) score);
return scoreStr.substring(0, scoreStr.length() - 13);
}
输出
db score:2.28461342005999E14 member:b
real score:22
db score:2.28460342005999E14 member:c
real score:22
db score:1.8390855805288E13 member:a
real score:1