(Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九

3.队伍信息

4.某人离开队伍

5.正常排队完离开队伍

6.某人在队伍的所在位置,前面人数,后面人数

7.插队 (道德不允许,咱们只是做个例子)

开始编码:


ps :怎么整合redis这篇文章就不介绍了,如果还不会的可以看我的这个系列的教程。

为了方便咱们的演示,直接通过写接口调接口的方式。

创建一个MyTestController.java,注入一下RedisTemplate:

/**

  • @Author : JCccc

  • @CreateTime : 2020/3/27

  • @Description :

**/

@Controller

@RequestMapping(“/test”)

public class MyTestController {

@Autowired

private RedisTemplate redisTemplate;

}

1. 正常排队

/**

  • 加入队伍

  • @param userId

*/

@ResponseBody

@GetMapping(“/addQueue”)

public void addQueue(@RequestParam(“userId”) String userId) {

// redisTemplate.opsForList().leftPush(“myQueue”,userId);

redisTemplate.opsForList().rightPush(“yourQueue”,userId);

}

可以看到这个接口里面,我的代码有一行注释的,其实两行低吗都是往队伍里面去添加数据达到 排队加入队伍的功能。

而通过数据顺序来说,我选择使用rightPush,这样更能容易理解排队的原则,先进先出。

那么我们开始调用接口 /addQueue ,看看效果:

可以看到redis里面的数据,01 妥妥地加入到了队伍:

重复上面的操作,模拟出一个小队列数据,将02,03,04,05 也按顺序排队加入到队伍里,结果如:

2.队伍总人数

/**

  • 队伍总人数

*/

@ResponseBody

@GetMapping(“/queueCount”)

public String queueCount() {

Long listSize = redisTemplate.opsForList().size(“yourQueue”);

return “队伍总人数:”+listSize;

}

调用接口,查看队伍总人数:

3.队伍信息

/**

  • 队伍详情

*/

@ResponseBody

@GetMapping(“/queueData”)

public String queueData() {

List listData = redisTemplate.opsForList().range(“yourQueue”, 0, -1);

return listData.toString();

}

调用接口,查看队伍详情:

4.某人离开队伍

/**

  • 离开队伍

  • @param userId

*/

@ResponseBody

@GetMapping(“/leaveQueue”)

public void leaveQueue(@RequestParam(“userId”) String userId) {

Long removeNum = redisTemplate.opsForList().remove(“yourQueue”, 0, userId);

System.out.println(removeNum);

}

这个接口里面使用的方法,第二个参数,需要注意:

对于list数据其实是允许重复的,但是我们模拟的队列数据,给用户分配的userId保持唯一。

但是原有的remove方法使兼容了重复数据移除的场景,

当传入 0: 移除整个队列里的 目标值 ,也就是录入传入userId是01,

那么有一个也移除,有N个也移除,反正保证干干净净。

当传入小于0的数,如-1或者传入大于0的数,如1: 就是不同顺序去检查这个队伍,直到碰到第一个目标值,进行删除。

调用接口,模拟 03 这个用户离开队伍:

结果:

5.正常排队完离开队伍

/**

  • 默认离队,先进先出

*/

@ResponseBody

@GetMapping(“/defaultLeaveQueue”)

知其然不知其所以然,大厂常问面试技术如何复习?

1、热门面试题及答案大全

面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer

2、多线程、高并发、缓存入门到实战项目pdf书籍

3、文中提到面试题答案整理

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入


JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入

[外链图片转存中…(img-LYG45D8S-1721880999327)]

[外链图片转存中…(img-vDOCmgMR-1721880999328)]

[外链图片转存中…(img-fTzrJkIs-1721880999328)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值