2014-01-15 2 views
-1

Я пытаюсь подключить redis через C#, используя ServiceStack.Redis.Оптимизация сценария Lua

Я написал под кодом, чтобы подтвердить номер на основе указанного ключа.

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 для производительности. пожалуйста помоги.

+0

Он должен быть внутри блока транзакций. – user2771292

+0

какой транзакционный блок? – Schollii

+0

О том, сколько тысяч транзакций в секунду мы говорим? Профилировали ли вы и обнаружили, что сценарий Lua является проблемой? – dualed

ответ

1

Исходное форматирование ужасно - так часто бывает и производительность.

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 таблице.

+0

. Я согласен с вами, но я хочу включить один и тот же внутри одного блока транзакций, что и является причиной использования сценария lua. – user2771292

+0

Последние 2 строки Я заменил его, когда INCRBY api вызывает redis – user2771292

Смежные вопросы