gpt4 book ai didi

c#-4.0 - Lua脚本优化

转载 作者:可可西里 更新时间:2023-11-01 11:47:42 25 4
gpt4 key购买 nike

我正在尝试使用 ServiceStack.Redis 通过 C# 连接 Redis。

我已经编写了下面的代码来根据指定的 key 验证数字。

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 表中缓存已编译的 block 。

关于c#-4.0 - Lua脚本优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21132001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com