微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中通过redis实现每日实时排行榜

 

通过redis中zset类型来实现每日排行榜还是比较容易的,但也有一些地方需要注意。

具体实现代码如下:

1.设置数据

首先是要把需要的数据设置到redis中,注意分值前面的负号,由于zset特性是越小排到越前,所以分值需要加上负号才能到达分值越大排名越靠前的效果

 1     /**
 2      * 设置排行榜信息
 3      *
 4      * @param anchorId
 5      * @param score
 6      * @param userId
 7      */
 8     public static void setRankInfoCache(UUID anchorId, Integer userId, Double score, Integer siteId) {
 9         getJedisClientProxy().zadd(SafeEncoder.encode(LiveAnchorContextCacheKey.getDayRewardCacheKey(anchorId, siteId)),
10                 -score, SafeEncoder.encode(String.valueOf(userId)));
11     }

 

2.获取当日排行榜前十

 1     /**
 2      * 获取当日排行榜前十信息缓存
 3      *
 4      * @param key
 5      * @return
 6      */
 7     public static List<LiveUserRankCache> getDayRankCache(String key) {
 8         List<LiveUserRankCache> userRankCacheList = new ArrayList<>();
 9         // Todo 认取排行榜前十,可根据需求改成 TopN
10         Set<Tuple> tuples = getJedisClientProxy().zrangeWithscores(SafeEncoder.encode(key), 0, 9);
11         long rank = 1;
12         for (Tuple tuple : tuples) {
13             userRankCacheList.add(new LiveUserRankCache(rank, -tuple.getscore(), tuple.getElement()));
14         }
15         return userRankCacheList;
16     }

 

3.根据用户ID获取排行榜信息

 1     /**
 2      * 根据用户ID获取排行榜信息
 3      *
 4      * @param key
 5      * @param userId
 6      */
 7     public static LiveUserRankCache getRankInfoCache(String key, Integer userId) {
 8         Long rank = getJedisClientProxy().zrank(SafeEncoder.encode(key)
 9                 , SafeEncoder.encode(String.valueOf(userId)));
10         if (rank == null) {
11             // 没有排行时,直接返回一个认的
12             return new LiveUserRankCache(-1L, 0D, String.valueOf(userId));
13         }
14         Double zscore = getJedisClientProxy().zscore(SafeEncoder.encode(key)
15                 , SafeEncoder.encode(String.valueOf(userId)));
16         return new LiveUserRankCache(rank + 1, -zscore, String.valueOf(userId));
17     }

 完毕!仅供参考学习,转载请在明显位置注明出处,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐