java 秒杀 redis mq 代码
时间: 2023-09-14 22:11:35 浏览: 146
以下是一个简单的 Java 秒杀系统的伪代码,使用了 Redis 作为缓存和消息队列:
```java
public class SeckillService {
private RedisTemplate redisTemplate; // RedisTemplate,用于操作 Redis
private RabbitTemplate rabbitTemplate; // RabbitTemplate,用于操作 RabbitMQ
// 商品秒杀接口
public void seckill(String userId, String productId) {
// 判断用户是否已经秒杀过该商品,如果已经秒杀过则直接返回秒杀失败
if (redisTemplate.opsForSet().isMember("seckill:" + productId, userId)) {
return "秒杀失败";
}
// 判断商品库存是否充足,如果不充足则直接返回秒杀失败
if (redisTemplate.opsForValue().decrement("stock:" + productId) < 0) {
return "秒杀失败";
}
// 将用户加入已秒杀用户集合
redisTemplate.opsForSet().add("seckill:" + productId, userId);
// 将秒杀信息发送到 RabbitMQ 中,让后续的业务逻辑异步处理
rabbitTemplate.convertAndSend("seckill.exchange", "seckill.routingKey", new SeckillMessage(userId, productId));
return "秒杀成功";
}
// RabbitMQ 消息处理方法
@RabbitListener(queues = "seckill.queue")
public void handleSeckillMessage(SeckillMessage message) {
// 处理秒杀逻辑,例如生成订单等
// ...
}
}
```
以上代码使用 Redis 存储商品库存和已秒杀用户集合,使用 RabbitMQ 实现异步处理秒杀业务逻辑。在秒杀接口中,首先判断用户是否已经秒杀过该商品,如果已经秒杀过则直接返回秒杀失败;然后判断商品库存是否充足,如果不充足则直接返回秒杀失败;最后将用户加入已秒杀用户集合,并将秒杀信息发送到 RabbitMQ 中。RabbitMQ 消息处理方法中,处理秒杀逻辑,例如生成订单等。
阅读全文