2. 原子扣减逻辑实现(Lua 脚本)
为避免“读取-判断-写入”三步操作在并发环境下的竞态条件,将整个检查与扣减逻辑封装为一段 Lua 脚本,利用 Redis 单线程执行 Lua 脚本的特性保证原子性。
Lua 脚本内容:
lua
复制
下载
-- KEYS[1]: 库存Key
-- ARGV[1]: 请求扣减数量
local key = KEYS[1]
local requested = tonumber(ARGV[1])
local current = tonumber(redis.call('GET', key) or 0)
if current >= requested then
redis.call('DECRBY', key, requested)
return 1 -- 扣减成功
else
return 0 -- 库存不足
end