0.前言
24-尚硅谷-Redis6-事务和锁机制-秒杀案例-基本实现
1.商品秒杀
商家上架数量极少、价格极低的产品供用户抢购
- 可行性判断
- 商品库存 - 1
- 生成商品订单
2.代码实现
-
库存 - stock:FX627 : 50 50为库存数量
-
订单 - order:FX627 : 12 12为用户id
package com.eshang.jedis.demo02.service;
import com.eshang.jedis.demo02.util.RedisUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @author xyx-Eshang
*/
@Service
public class SecKillService {
@Resource
RedisUtil redisUtil;
public Boolean doSecKill(String userId, String productId) {
//01. userId和productId的非空判断
if (userId == null || productId == null) {
return false;
}
//02. 拼接key
//02.1. 库存key
String stockKey = "stock:" + productId;
//02.1. 订单key
String orderKey = "order:" + productId;
//03. 获取库存,如果库存为null,表示秒杀尚未开始,拒绝
if(redisUtil.get(stockKey) == null){
System.out.println("秒杀尚未开始!");
redisUtil.close();
return false;
}
//04. 判断商品库存,若库存小于1,秒杀结束
if((Integer)redisUtil.get(stockKey) < 1){
System.out.println("库存不足,秒杀结束!");
redisUtil.close();
return false;
}
//05. 如果还没有return,执行秒杀
//05.1. 库存-1
redisUtil.decr(stockKey, (long)1);
//05.2. 生成订单
redisUtil.sAdd(orderKey, userId);
System.out.println("秒杀成功!");
redisUtil.close();
return true;
}
public void addStock(String productId, Integer number){
String stockKey = "stock:" + productId;
redisUtil.incr(stockKey, (long)number);
System.out.println("成功增加" + number + "件" + productId + "!");
redisUtil.close();
}
}