DECRBY
命令在 Redis 中是原子性的,這意味著在執行過程中不會被其他命令中斷
然而,如果你需要確保在多個客戶端之間對同一個鍵執行 DECRBY
操作的原子性,你可以使用以下方法:
DECRBY
操作,并將腳本發送給 Redis 服務器執行。這樣可以確保在執行過程中不會被其他命令中斷。這是一個示例 Lua 腳本:local key = KEYS[1]
local decrement = tonumber(ARGV[1])
local current_value = tonumber(redis.call("GET", key) or "0")
local new_value = current_value - decrement
if new_value < 0 then
return -1
else
redis.call("SET", key, new_value)
return new_value
end
要使用此腳本,你可以使用 EVAL
命令將其發送給 Redis 服務器:
EVAL <script> 1 your_key decrement_value
MULTI
、EXEC
、WATCH
等命令來實現。要使用事務確保 DECRBY
操作的原子性,你可以這樣做:MULTI
DECRBY your_key decrement_value
EXEC
如果事務中的任何命令失敗,整個事務將回滾,DECRBY
操作將不會執行。