redis笔记05-redis实现积分排行榜

1.业务层
- 方法1:实现InitializingBean接口

    /**
     * 初始化数据
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        this.initData();
    }

    private void initData() {
        List<UserScore> list = userScoreMapper.selectList();
        list.forEach(i -> {
            ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
            zset.add("rankService:score:", i.getUserId(), i.getUserScore());
        });
    }

- 方法2:实现ApplicationRunner接口

    /**
     * 初始化数据
     */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        this.initData();
    }

区别:

  • InitializingBean:加载完成才会对外服务。
  • ApplicationRunner:启动后才会加载数据,即先对外服务,再加载数据。

2.测试代码
Controller

    @GetMapping("/listRank/{start}/{end}")
    public List<Map<String, Object>> listRank(@PathVariable("start") Integer start, @PathVariable("end") Integer end) {
        return rankService.listRank(start, end);
    }

Service

    public List<Map<String, Object>> listRank(Integer start, Integer end) {
        Set<ZSetOperations.TypedTuple<Object>> typedTuples = RedisUtil.zRankWithScore("rankService:score:", start, end);
        List<Map<String, Object>> llist = new ArrayList<>();
        Iterator<ZSetOperations.TypedTuple<Object>> iterator = typedTuples.iterator();
        while (iterator.hasNext()) {
            ZSetOperations.TypedTuple<Object> next = iterator.next();
            Map<String, Object> map = new HashMap<>(2);
            map.put("score", next.getScore());
            map.put("userId", next.getValue());
            llist.add(map);
        }
        return llist;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值