Java中通过redis实现每日实时排行榜
2021/12/31 2:10:55
本文主要是介绍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 }
完毕!仅供参考学习,转载请在明显位置注明出处,谢谢!
这篇关于Java中通过redis实现每日实时排行榜的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-20测试人员都是画画大神,让我看看谁还不会用代码图?
- 2024-05-20年薪百万的程序员都在用的摸鱼方式……
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了