|
@@ -147,54 +147,54 @@ LUA;
|
|
|
return $res;
|
|
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)
|
|
public static function xAdd($key, $col, $value)
|