Redis排行榜简单实现

概述

最近在学Redis,用Redis实现一个简单的排行榜功能

demo

用到了两张表,用于初始化数据保存
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
排行榜初始化类:主要功能是在项目启动时将表数据添加到Redis中,Redis中有的数据不做处理,Redis中无的数据将数据添加到Redis中

@Component
public class RankInit implements ApplicationRunner {

    @Autowired
    private GoodsService goodsService;
    @Autowired
    private RedisTemplate redisTemplate;


    @Override
    public void run(ApplicationArguments args) throws Exception {

        //redisTemplate.delete(RankConstant.RankKey);

        List<GoodsVo> goodsVos = goodsService.listGoodsVo();

        goodsVos.forEach(e->{
		
		#redis中根据key和商品id查找对应的值
            Long rank = redisTemplate.opsForZSet().reverseRank(RankConstant.RankKey, String.valueOf(e.getId()));

            if (Objects.isNull(rank)){
                redisTemplate.opsForZSet().add(RankConstant.RankKey,String.valueOf(e.getId()),0);
            }

        });
    }
}

测试类有两个,一个用于给商品的score值加分,模拟用户操作,用户点击一次,该商品的score值加一次,这样榜单排名的效果就出来了

 @RequestMapping("easyRank")
    public Set easyRank(){

        return this.redisTemplate.opsForZSet().reverseRangeWithScores(RankConstant.RankKey, 0, 4);

    }

    @RequestMapping("addScore")
    public String addScore(@RequestParam Long goodId){

        this.redisTemplate.opsForZSet().incrementScore(RankConstant.RankKey,String.valueOf(goodId),1);
        return "ok";
    }

reverseRangeWithScores方法:逆序(从大到小)取出榜单的前5名

incrementScore方法,给指定商品加score值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值