当前位置:网站首页>【Redis實現秒殺業務①】秒殺流程概述|基本業務實現
【Redis實現秒殺業務①】秒殺流程概述|基本業務實現
2022-06-24 09:05: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("搶購水果成功,去步爾斯特的主頁看看吧!");
}
边栏推荐
- 【PyTorch基础教程30】DSSM双塔模型代码解析
- Linux (centos7.9) installation and deployment of MySQL Cluster 7.6
- 216. 组合总和 III-枚举法
- 2138. splitting a string into groups of length k
- [e325: attention] VIM editing error
- 数云发布2022美妆行业全域消费者数字化经营白皮书:全域增长破解营销难题
- [Niuke] length of the last word of HJ1 string
- leetcode——错误的集合
- uniapp 开发多端项目如何配置环境变量以及区分环境打包
- 嵌入式 | 硬件转软件的几条建议
猜你喜欢

The list of open source summer winners has been publicized, and the field of basic software has become a hot application this year

JS to find and update the specified value in the object through the key

Why can ping fail while traceroute can

Leetcode -- wrong set

A tip to read on Medium for free

【LeetCode】541. Reverse string II

Ebanb B1 Bracelet brush firmware abnormal interrupt handling

What is SRE? A detailed explanation of SRE operation and maintenance system

Alibaba Senior Software Testing Engineer recommends testers to learn -- Introduction to security testing

【NOI模拟赛】寄(树形DP)
随机推荐
[pytorch basic tutorial 30] code analysis of DSSM twin tower model
Spark - LeftOuterJoin 结果条数与左表条数不一致
Prompt code when MySQL inserts Chinese data due to character set problems: 1366
2022 spring recruitment interview summary
threejs辉光通道01(UnrealBloomPass && layers)
十二、所有功能实现效果演示
开源之夏中选名单已公示,基础软件领域成为今年的热门申请
China chip Unicorn Corporation
Unable to change the virtual machine power status and report an error solution
JS to find and update the specified value in the object through the key
Installation of sophus package in slam14 lecture
Data middle office: overview of data governance
基于单片机开发的酒精浓度测试仪方案
[noi simulation] pendulum (linear algebra, Du Jiao sieve)
用VNC Viewer的方式远程连接无需显示屏的树莓派
IDEA另起一行快捷键
[pytoch basic tutorial 31] youtubednn model analysis
【Pytorch基础教程31】YoutubeDNN模型解析
数据中台:中台实践与总结
解决:模型训练时loss出现nan