java代码
时间: 2023-07-03 09:21:42 浏览: 81
以下是一个简单的 Java 代码示例,演示了如何通过 Java 实现订单库存扣减:
```java
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class OrderService {
private Jedis jedis = new Jedis("localhost", 6379);
public boolean orderStockDeduction(String orderId, String productId, int quantity) {
String key = "product_stock_" + productId;
// 获取商品当前库存
String stockStr = jedis.get(key);
if (stockStr == null) {
return false;
}
int stock = Integer.parseInt(stockStr);
// 判断库存是否充足
if (stock < quantity) {
return false;
}
// 扣减库存
while (true) {
jedis.watch(key);
if (stock < quantity) {
jedis.unwatch();
return false;
}
Transaction tx = jedis.multi();
tx.decrBy(key, quantity);
if (tx.exec() != null) {
return true;
}
}
}
}
```
以上代码使用了 Redis 的事务和 watch 功能实现了库存扣减的原子性操作,当多个并发请求同时访问时,只有一个请求能够成功扣减库存,保证了库存数据的准确性和一致性。
阅读全文