前言:

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

正文:

一、快速搭建springboot项目

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

 

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

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

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

 

二、配置文件

pom的依赖:

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 集合工具类 -->
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.2</version>
        </dependency>
        <!-- json -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

application.yml的配置

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

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

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

 到这里说明项目搭建成功了,然后开始利用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<String,String> redisTemplate;
    @Autowired
    private UserService userService;

    public static final String SCORE_RANK = "score_rank";

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

service层

public interface UserService {
    List<User> selectUserListAll();
}

serviceimpl层

@Service
public class UserServiceImpl implements UserService {

    @Override
    public List<User> selectUserListAll() {
      List<User> 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;
    }
}

 包的结构:

五、再次访问接口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位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐