SpringBoot整合Redis实现排行榜功能

前言:

我们在开发中时常会遇到排行榜的小功能开发,基本实现的思路,要不就是在数据库利用order by排序,要不就是查出数据后在代码里进行排序,再或者就是利用redis的进行排序,今天这篇文章就简单的介绍下如何利用redis进行排序。

正文:

一、快速搭建springboot项目

按着下面一步一步的操作,就可以把项目快速的搭建起来。

SpringBoot整合Redis实现排行榜功能_第1张图片

SpringBoot整合Redis实现排行榜功能_第2张图片

 

SpringBoot整合Redis实现排行榜功能_第3张图片

SpringBoot整合Redis实现排行榜功能_第4张图片

点击Finish完后,项目到这里基本就搭建好了。 

然后建议把Maven改成自己的仓库,当然这一步操不操作都可以。

SpringBoot整合Redis实现排行榜功能_第5张图片

然后这里我设置端口为8085,因为默认的端口8080与我本地其他的程序冲突了。

SpringBoot整合Redis实现排行榜功能_第6张图片

 

二、配置文件

pom的依赖:

 
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
        
            org.projectlombok
            lombok
            provided
        
        
        
            commons-collections
            commons-collections
            3.2.2
        
        
        
            com.alibaba
            fastjson
            1.2.47
        

application.yml的配置

server.port=8085
#配置Redis,redis的host是虚拟机服务器上的IP地址,端口6379
spring.redis.host=127.0.0.1
spring.redis.port=6379

 三、新建一个controller,看看项目是否可以正常访问

SpringBoot整合Redis实现排行榜功能_第7张图片

项目运行起来过后再浏览器的地址栏输入http://localhost:8085/hello,效果如下

SpringBoot整合Redis实现排行榜功能_第8张图片

 到这里说明项目搭建成功了,然后开始利用redis实现排名。

四、redis实现排行榜的代码

User类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private String sno;
    private double score;
}

controller层

@RestController
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private UserService userService;

    public static final String SCORE_RANK = "score_rank";

    @GetMapping("/hello")
    public String hello(){
        Set> tuples = new HashSet<>();
        List users = userService.selectUserListAll();
        if(CollectionUtils.isNotEmpty(users)){
            for (User user:users) {
                DefaultTypedTuple tuple = new DefaultTypedTuple<>(user.getName(), user.getScore());
                tuples.add(tuple);
            }
        }
        Long num = redisTemplate.opsForZSet().add(SCORE_RANK, tuples);
        Set> rangeWithScores = redisTemplate.opsForZSet().reverseRangeWithScores(SCORE_RANK, 0, 10);
        System.out.println("获取到的排行和分数列表:" + JSON.toJSONString(rangeWithScores));
        return JSON.toJSONString(rangeWithScores);
    }
}

service层

public interface UserService {
    List selectUserListAll();
}

serviceimpl层

@Service
public class UserServiceImpl implements UserService {

    @Override
    public List selectUserListAll() {
      List users = new ArrayList<>();
      User user1 = new User("阿达","1",88);
      User user2 = new User("阿港","2",90);
      User user3 = new User("阿硕","3",60);
      User user4 = new User("阿涂","4",78);
      User user5 = new User("阿俊","5",78);
      users.add(user1);
      users.add(user2);
      users.add(user3);
      users.add(user4);
      users.add(user5);
      return users;
    }
}

 包的结构:

SpringBoot整合Redis实现排行榜功能_第9张图片

五、再次访问接口http://localhost:8085/hello,查看排序后的数据

注意:application.yml里的redis的配置,不是只要配置一下就行,这个要根据你真实连接redis的ip和端口设置。

server.port=8085
#配置Redis,redis的host是虚拟机服务器上的IP地址,端口6379
spring.redis.host=127.0.0.1
spring.redis.port=6379

 

总结:

就分享最近摘抄的一句话吧,一番风顺的叫活着,十有八九不如意的才是生活。啥叫硬汉,就是认清了生活的真相,还依然爱着它!哪怕再扯再累!莫怂,怂要是有用的话,我早就怂了。

希望今年大家可以比上一年的自己有所进步!

我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有16522位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!

你可能感兴趣的:(开发概念性问题,java)