·更新于 2026年4月21日· 50 次浏览 Redis脚本
Redis Lua 脚本与原子性:为什么不是万能事务
`EVAL` 在单实例上的原子语义;脚本阻塞与慢脚本风险;与 `MULTI/EXEC` 的选用场景对比。
作者
ZHOU YI
Redis 执行 Lua 脚本时不会穿插其它命令,适合「读-改-写」一体的原子逻辑,如库存扣减与条件校验。
lua
redis.call('INCR', KEYS[1])
if tonumber(redis.call('GET', KEYS[1])) > tonumber(ARGV[1]) then
return redis.error_reply('overflow')
end
return 1注意
- 避免在脚本中做重计算或大数据遍历
- 集群模式下 key 需落在同一 slot(hash tag)
- 脚本应版本化,避免热更新逻辑不一致