Redis 的 DECR
命令用于將存儲在哈希表(Hashes)或整數集合(Sorted Sets)中的數字減一。為了保證操作的原子性,Redis 使用了 Lua 腳本來執行 DECR
操作。Lua 腳本在 Redis 中是原子性執行的,這意味著在執行過程中不會被其他命令打斷。
當客戶端發送 DECR
命令時,Redis 會將 Lua 腳本作為參數傳遞給它。然后,Redis 會執行這個腳本,并返回結果給客戶端。在這個過程中,其他客戶端無法執行其他命令,直到當前腳本的執行完成。這樣就確保了 DECR
操作的原子性。
以下是一個簡單的 Lua 腳本示例,用于實現 DECR
功能:
local key = KEYS[1]
local decrement = tonumber(ARGV[1])
local value = tonumber(redis.call("HGET", key, ARGV[2])) or 0
if value < decrement then
return -1
else
return redis.call("HSET", key, ARGV[2], value - decrement)
end
在這個腳本中,我們首先從哈希表中獲取指定鍵的值,然后將其轉換為數字。如果值小于要減去的數字,我們返回 -1,表示操作失敗。否則,我們將更新哈希表中的值,并返回新值。
當客戶端使用 EVAL
命令執行此腳本時,它將確保 DECR
操作的原子性。例如:
EVAL "腳本內容" 1 mykey decrement 1