rabin 3 днів тому
батько
коміт
6d6172bd83
1 змінених файлів з 48 додано та 48 видалено
  1. 48 48
      src/Dever/Helper/Redis.php

+ 48 - 48
src/Dever/Helper/Redis.php

@@ -147,54 +147,54 @@ LUA;
         return $res;
     }
 
-    # 原子操作
-    public static function hOper($key, $field, $amount)
-    {
-        $lua = <<<LUA
-    local balance = redis.call("HGET", KEYS[1], KEYS[2])
-    local change = tonumber(ARGV[1])
-
-    if not balance then
-        return -1
-    end
-
-    balance = tonumber(balance)
-    local new_balance = balance + change
-
-    if new_balance < 0 then
-        return 0
-    end
-
-    redis.call("HSET", KEYS[1], KEYS[2], new_balance)
-    return new_balance
-    LUA;
-
-        return self::connect()->eval($lua, [$key, $field, $amount], 2);
-    }
-
-    public static function oper($key, $amount)
-    {
-        $lua = <<<LUA
-    local balance = redis.call("GET", KEYS[1])
-    local change = tonumber(ARGV[1])
-
-    if not balance then
-        return -1   --余额未初始化
-    end
-
-    balance = tonumber(balance)
-    local new_balance = balance + change
-
-    if new_balance < 0 then
-        return 0    --余额不足
-    end
-
-    redis.call("SET", KEYS[1], new_balance)
-    return new_balance
-    LUA;
-
-        return self::connect()->eval($lua, [$key, $amount], 1);
-    }
+    # 原子操作
+    public static function hOper($key, $field, $amount)
+    {
+        $lua = <<<LUA
+    local balance_raw = redis.call("HGET", KEYS[1], KEYS[2])
+    if not balance_raw then
+        return -1
+    end
+
+    local balance = tonumber(balance_raw)
+    local change = tonumber(ARGV[1])
+    local new_balance = balance + change
+
+    if new_balance < 0 then
+        return 0
+    end
+
+    local formatted = string.format("%.2f", new_balance)
+    redis.call("HSET", KEYS[1], KEYS[2], formatted)
+    return formatted
+    LUA;
+
+        return self::connect()->eval($lua, [$key, $field, $amount], 2);
+    }
+
+    public static function oper($key, $amount)
+    {
+        $lua = <<<LUA
+    local balance_raw = redis.call("GET", KEYS[1])
+    if not balance_raw then
+        return -1   --余额未初始化
+    end
+
+    local balance = tonumber(balance_raw)
+    local change = tonumber(ARGV[1])
+    local new_balance = balance + change
+
+    if new_balance < 0 then
+        return 0    --余额不足
+    end
+
+    local formatted = string.format("%.2f", new_balance)
+    redis.call("SET", KEYS[1], formatted)
+    return formatted
+    LUA;
+
+        return self::connect()->eval($lua, [$key, $amount], 1);
+    }
 
 
     public static function xAdd($key, $col, $value)