自上次 Redis 更新后 Lua 脚本出错
Error in Lua script since last Redis update
自 Redis 6.2.7(和 Redis 7)以来,现有的 Lua 脚本停止工作并显示错误消息:
“错误 user_script:6:尝试修改只读 table 脚本:2f405679dab26da46ec86d29bded48f66a99ff64,@user_script:6。”
该脚本在 Redis 6.2.6 上运行良好。我在最新的 Redis 发行说明中没有发现任何重大更改。
有线索吗?谢谢!!
这是脚本:
-- returns valid task ID if successfull, nil if no tasks
local tenantId = unpack(ARGV)
local activeTenantsSet, activeTenantsList, tenantQueue = unpack(KEYS)
-- next task lua based function - return nil or taskId
function next ()
local task = redis.call('ZPOPMAX', tenantQueue)
if table.getn(task) == 0 then
redis.call('SREM', activeTenantsSet, tenantId)
redis.call('LREM', activeTenantsList, 0, tenantId)
return nil
end
redis.call('SADD', activeTenantsSet, tenantId)
redis.call('RPUSH', activeTenantsList, tenantId)
return task[1]
end
-------------
return next()
尝试在 'function next'
前面添加 'local'
local function next ()
...
自 Redis 6.2.7(和 Redis 7)以来,现有的 Lua 脚本停止工作并显示错误消息:
“错误 user_script:6:尝试修改只读 table 脚本:2f405679dab26da46ec86d29bded48f66a99ff64,@user_script:6。”
该脚本在 Redis 6.2.6 上运行良好。我在最新的 Redis 发行说明中没有发现任何重大更改。
有线索吗?谢谢!!
这是脚本:
-- returns valid task ID if successfull, nil if no tasks
local tenantId = unpack(ARGV)
local activeTenantsSet, activeTenantsList, tenantQueue = unpack(KEYS)
-- next task lua based function - return nil or taskId
function next ()
local task = redis.call('ZPOPMAX', tenantQueue)
if table.getn(task) == 0 then
redis.call('SREM', activeTenantsSet, tenantId)
redis.call('LREM', activeTenantsList, 0, tenantId)
return nil
end
redis.call('SADD', activeTenantsSet, tenantId)
redis.call('RPUSH', activeTenantsList, tenantId)
return task[1]
end
-------------
return next()
尝试在 'function next'
前面添加 'local'local function next ()
...