我正在编写一些redis内部的lua逻辑,几乎每个脚本都有一些共同点。将这些共同点移动到共享函数中会非常方便,但有以下限制:
- redis无法使用lua的require语句。
- 官方表示不能调用其他redis函数(参见:https://dev59.com/yHzaa4cB1Zd3GeqPPWSk#22599862)。
local prefix = "/" .. type
if typeId then
prefix = prefix .. "(" .. typeId .. ")"
end
我在考虑在将脚本输入redis之前进行一些后处理,但这似乎有点过度设计...
如何最好地解决/减少这个问题?
更新:
local registryKey = "/counters/set-" .. type
local updatedKey = "/counters/updated/set-" .. type
if typeId then
redis.call("SAdd", updatedKey, name .. ":" .. typeId)
redis.call("SAdd", registryKey, name .. ":" .. typeId)
else
redis.call("SAdd", updatedKey, name)
redis.call("SAdd", registryKey, name)
end
这是另一个代码示例,它不能轻松地移动到客户端,因为它调用Redis命令,并作为交易的一部分工作。
谢谢!
MULTI
内同时使用它们,即MULTI EVALSHA EVALSHA ...
从带宽的角度来看,这似乎并不理想,但不应该是一个大问题。 - let4be