我正在尝试使用ServiceStack.Redis
通过c连接redis。
我已经写了下面的代码来根据指定的密钥验证数字。argv[1]
是关键argv[2]
是数字
string strScript = " local intCurrentVal = redis.call('GET', '' .. ARGV[1] .. ''); \n"
+ "if (tonumber(intCurrentVal) <= 0 ) then return 1 elseif ( (tonumber(intCurrentVal)) - (tonumber('' .. ARGV[2] .. '')) < 0 ) then return 0 end;"
+ "local intUpdatedVal = redis.call('SET', '' .. ARGV[1] .. '',( intCurrentVal - tonumber('' .. ARGV[2] .. '')));"
+ "local intCurr = redis.call('GET', '' .. ARGV[1] .. ''); return intCurr";
逻辑步骤:
获取当前值
检查当前值是否不应小于或等于0
检查当前值传递值是否不应小于o
如果传递的当前值不小于0,则将(传递的当前值)设置为当前值
获取当前值
是否可以优化和优化以下lua脚本以提高性能。请帮忙。
最佳答案
原始格式很糟糕——性能也很糟糕。
local key = tostring(ARGV[1])
local number = tonumber(ARGV[2])
local current = tonumber(redis.call('GET', key))
if current <= 0 then
return 1
elseif current < number then
return 0
end
redis.call('SET', key, current - number)
return redis.call('GET', key)
进一步的优化步骤可能包括:全局函数的本地化(例如字符串、tonumber等)、在lua_registryindex表缓存编译的块。
关于c#-4.0 - Lua脚本优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21132001/