• Redis实现排行榜(带二位小数点)


    public class UserRank {
    
        private String userId;
    
        private double score;
    }


    @RestController
    @RequestMapping("rank")
    public class RankController {
    
        @Autowired
        private RankService rankService;
    
        @GetMapping(value = "/add")
        public boolean add(String userId, double score){
            return rankService.add(userId, score);
        }
    
        @GetMapping(value = "/getRanks")
        public List<UserRank> getRanks(){
            return rankService.getRanks(0, 99);
        }
    
    }
    


    @Service
    public class RankServiceImpl implements RankService {
    
        @Autowired
        private StringRedisTemplate redisTemplate;
    
        public static final String SCORE = "score";
        public static final BigDecimal tailDecimal = new BigDecimal(String.valueOf(1000000000000000d));
        public static final BigDecimal milsDecimal = new BigDecimal(String.valueOf(9999999999999d));
    
        @Override
        public boolean add(String userId, double score) {
            BigDecimal dealScore  = new BigDecimal(String.valueOf(score));
            dealScore = dealScore.multiply(tailDecimal).add(milsDecimal).subtract(new BigDecimal(String.valueOf(System.currentTimeMillis())));
            return redisTemplate.opsForZSet().add(SCORE, userId, dealScore.doubleValue());
        }
    
        @Override
        public List<UserRank> getRanks(int start, int end) {
            Set<ZSetOperations.TypedTuple<String>> scoreSet = redisTemplate.opsForZSet().reverseRangeWithScores(SCORE, start, end);
            List<UserRank> userRanks = new ArrayList<>(scoreSet.size());
            for (ZSetOperations.TypedTuple s : scoreSet) {
                userRanks.add(new UserRank(s.getValue().toString(), new BigDecimal(String.valueOf(s.getScore())).divide(tailDecimal).setScale(2, BigDecimal.ROUND_DOWN).doubleValue()));
            }
            return userRanks;
        }

    添加

    http://localhost:8080/rank/add?userId=1111&score=2497444.91

    查看前百排行

    http://localhost:8080/rank/getRanks

    如果还要其他的数据 可以根据userId查询

  • 相关阅读:
    图像和流媒体 -- 帧率、分辨率、码流的概念和关系(转)
    Linux设备驱动(转)
    STM32开发 -- 4G模块开发详解(转)
    Linux下EC20实现ppp拨号(转)
    使用机智云APP控制战舰V3 (转)
    USB Host读取U盘成功
    FreeModbus在STM32上移植(转)
    处理分页操作
    HBase参数配置及说明(转)
    学习JNDI
  • 原文地址:https://www.cnblogs.com/weiapro/p/15303261.html
Copyright © 2020-2023  润新知