当前位置:网站首页>【Redis实现秒杀业务①】秒杀流程概述|基本业务实现
【Redis实现秒杀业务①】秒杀流程概述|基本业务实现
2022-06-24 07:28:00 【步尔斯特】
小伙伴们,从今天开始,我们一起用Redis来实现秒杀业务,要一起加油啊!
我们大概的思路就是设计一个水果秒杀小项目。
首先我们会有一种水果,该水果拥有名字、数量、抢购开始时间和抢购结束时间。
业务流程
- 秒杀是否开始或结束,如果尚未开始或已经结束则无法下单
- 库存是否充足,不足则无法下单

水果实体类

/** * 水果 * * @author issavior */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Fruits implements Serializable {
private static final long serialVersionUID = 1;
private Long id;
private String name;
private Integer count;
private Date startTime;
private Date endTime;
}
新增水果
Controller
/** * @author issavior */
@RestController
@RequestMapping("/seckill")
public class SeckillController {
@Autowired
private SeckillService seckillService;
/** * 新增水果 * @param fruits 水果 * @return ResponseEntity<Object> */
@PostMapping
public ResponseEntity<Object> insertFruits(@RequestBody Fruits fruits) {
return seckillService.insertFruits(fruits);
}
}
ServiceImpl
/** * @author issavior */
@Service
public class SeckillServiceImpl implements SeckillService {
@Autowired
private SeckillMapper seckillMapper;
@Autowired
private RedisIdWorker redisIdWorker;
/** * 新增水果 * * @param fruits 新增的水果数据 * @return ResponseEntity<Object> */
@Override
public ResponseEntity<Object> insertFruits(Fruits fruits) {
// 全局唯一ID工具类,详情可见系列文章上一篇
long id = redisIdWorker.nextId("seckill:fruits");
fruits.setId(id);
int successFlag = seckillMapper.insertFruits(fruits);
if (successFlag == 0) {
return ResponseEntity.status(400).body("新增失败");
}
return ResponseEntity.ok("新增成功");
}
}
秒杀业务基本实现
/** * 抢购水果 * * @param id 抢购水果的主键ID * @return ResponseEntity<Object> */
@PostMapping("/{id}")
public ResponseEntity<Object> seckillFruits(@PathVariable("id") Long id) {
return seckillService.seckillFruits(id);
}
/** * 抢购水果 * * @param id 抢购水果的ID * @return ResponseEntity<Object> */
@Override
public ResponseEntity<Object> seckillFruits(Long id) {
Fruits fruits = seckillMapper.selectFruits(id);
if (fruits == null) {
return ResponseEntity.status(400).body("水果卖光了,下次再来吧!");
}
LocalDateTime startTime = fruits.getStartTime();
LocalDateTime endTime = fruits.getEndTime();
Integer count = fruits.getCount();
if (startTime.isAfter(LocalDateTime.now())) {
return ResponseEntity.status(400).body("活动还没开始,去步尔斯特的主页看看吧!!");
}
if (endTime.isBefore(LocalDateTime.now())) {
return ResponseEntity.status(400).body("活动已经结束了,去步尔斯特的主页看看吧!!");
}
if (count < 1) {
return ResponseEntity.status(400).body("没有库存了,去步尔斯特的主页看看吧!!");
}
int updateFruits = seckillMapper.updateFruits(id);
if (updateFruits == 0) {
return ResponseEntity.status(400).body("水果卖光了,下次再来吧!");
}
return ResponseEntity.ok("抢购水果成功,去步尔斯特的主页看看吧!");
}
边栏推荐
- [noi simulation] pendulum (linear algebra, Du Jiao sieve)
- 4274. suffix expression
- PM2 deploy nuxt3 JS project
- [pytoch basic tutorial 31] youtubednn model analysis
- 【牛客】把字符串转换成整数
- SLAM14讲中Sophus包的安装问题
- Pytorch读入据集(典型数据集及自定义数据集两种模式)
- GradScaler MaxClipGradScaler
- WebRTC系列-网络传输之5选择最优connection切换
- [MySQL from introduction to mastery] [advanced part] (I) character set modification and underlying principle
猜你喜欢

用VNC Viewer的方式远程连接无需显示屏的树莓派
![[noi Simulation Competition] send (tree DP)](/img/5b/3beb9f5fdad00b6d5dc789e88c6e98.png)
[noi Simulation Competition] send (tree DP)

A tip to read on Medium for free

The form image uploaded in chorme cannot view the binary image information of the request body

"Unusual proxy initial value setting is not supported", causes and Solutions

MySQL | 视图《康师傅MySQL从入门到高级》笔记

【牛客】把字符串转换成整数

MBA-day25 最值问题-应用题

数据中台:数据采集和抽取的技术栈详解

【LeetCode】415. 字符串相加
随机推荐
SLAM14讲中Sophus包的安装问题
Liunx Mysql安装
[MySQL from introduction to mastery] [advanced part] (I) character set modification and underlying principle
110. balanced binary tree recursive method
Data middle office: middle office practice and summary
Qingcloud based "real estate integration" cloud solution
解决:模型训练时loss出现nan
opencv最大值滤波(不局限于图像)
1704. 判断字符串的两半是否相似
用VNC Viewer的方式远程连接无需显示屏的树莓派
216. combined summation III enumeration method
【MySQL从入门到精通】【高级篇】(一)字符集的修改与底层原理
1844. 将所有数字用字符替换
【NOI模拟赛】给国与时光鸡(构造)
[pytorch basic tutorial 30] code analysis of DSSM twin tower model
520. 检测大写字母
2022 spring recruitment interview summary
Mysql数据(Liunx环境)定时备份
MBA-day25 最值问题-应用题
剑指 Offer 55 - I. 二叉树的深度-dfs法