JAVA中用Redis解决库存超卖的代码
时间: 2024-02-27 20:57:46 浏览: 92
redis客户端Java代码实例
以下是JAVA中使用Redis解决库存超卖问题的示例代码:
```java
public class RedisStock {
private static final String STOCK_KEY = "stock";
public boolean decreaseStock() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 开启事务
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.multi();
// 监控库存
redisTemplate.watch(STOCK_KEY);
Integer stock = (Integer) redisTemplate.opsForValue().get(STOCK_KEY);
// 判断库存是否足够
if (stock != null && stock > 0) {
// 库存减1
redisTemplate.opsForValue().decrement(STOCK_KEY);
// 提交事务
List<Object> result = redisTemplate.exec();
if (result == null || result.isEmpty()) {
// 提交事务失败,说明库存被其他线程修改,需要重试
return false;
}
return true;
} else {
// 库存不足
return false;
}
}
}
```
以上代码使用了RedisTemplate对Redis进行操作,并使用Redis的watch命令对库存进行监控。如果有其他客户端对库存进行操作,则会触发watch的回调函数,从而实现并发控制。
阅读全文