From 7a215e51f9f4066f2024d8476e5b5db2c06358a1 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 07 四月 2026 13:51:01 +0800
Subject: [PATCH] #lua锁示例
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java | 18 ++++++++++++++----
1 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java
index 9b01001..01fed7a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WmsRedisLuaService.java
@@ -10,6 +10,7 @@
import java.math.BigDecimal;
import java.time.Duration;
import java.util.Arrays;
+import java.util.List;
@Slf4j
@Service
@@ -17,16 +18,25 @@
public class WmsRedisLuaService {
private static final DefaultRedisScript<Long> LOCATION_CLAIM_SCRIPT = createScript("wms-lua/location-claim.lua");
+ private static final DefaultRedisScript<Long> STATION_CLAIM_SCRIPT = createScript("wms-lua/station-claim.lua");
private static final DefaultRedisScript<Long> INVENTORY_RESERVE_SCRIPT = createScript("wms-lua/inventory-reserve.lua");
private final StringRedisTemplate redisTemplate;
- public boolean claimLocation(String occupyKey, String taskKey, String mode, String occupyValue, String taskValue, Duration ttl) {
+ public boolean claimLocation(String occupyKey, String occupyValue, Duration ttl) {
Long result = redisTemplate.execute(
LOCATION_CLAIM_SCRIPT,
- Arrays.asList(occupyKey, taskKey),
- mode,
+ List.of(occupyKey),
occupyValue,
+ String.valueOf(ttl.toMillis())
+ );
+ return result != null && result > 0;
+ }
+
+ public boolean claimStation(String stationKey, String taskValue, Duration ttl) {
+ Long result = redisTemplate.execute(
+ STATION_CLAIM_SCRIPT,
+ List.of(stationKey),
taskValue,
String.valueOf(ttl.toMillis())
);
@@ -36,7 +46,7 @@
public boolean reserveInventory(String inventoryKey, String orderKey, BigDecimal initialAvailable, BigDecimal reserveQuantity, Duration ttl) {
Long result = redisTemplate.execute(
INVENTORY_RESERVE_SCRIPT,
- Arrays.asList(inventoryKey, orderKey),
+ List.of(inventoryKey, orderKey),
initialAvailable.toPlainString(),
reserveQuantity.toPlainString(),
String.valueOf(ttl.toMillis())
--
Gitblit v1.9.1