SpringBoot整合Redis实现排行榜功能
前言:我们在开发中时常会遇到排行榜的小功能开发,基本实现的思路,要不就是在数据库利用order by排序,要不就是查出数据后在代码里进行排序,再或者就是利用redis的进行排序,今天这篇文章就简单的介绍下如何利用redis进行排序。正文:一、快速搭建springboot项目按着下面一步一步的操作,就可以把项目快速的搭建起来。点击Finish完后,项目到这里基本就搭建好了。然后建议把Maven改成自
前言:
我们在开发中时常会遇到排行榜的小功能开发,基本实现的思路,要不就是在数据库利用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位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!
更多推荐
所有评论(0)