использовать подсчет общего значения ассоциированного массива Lua

#redis #lua

#redis #lua

Вопрос:

я хочу подсчитать тип данных каждого ключа redis, я пишу следующий код, но запускаю ошибку, как это исправить?

 local detail = {}
detail.hash = 0
detail.set = 0
detail.string = 0

local match = redis.call('KEYS','*')

for i,v in ipairs(match) do
     local val = redis.call('TYPE',v)
     detail.val = detail.val   1
end

return detail
  

(ошибка) Ошибка при запуске скрипта (вызов f_29ae9e57b4b82e2ae1d5020e418f04fcc98ebef4): @user_script:10: user_script:10: попытка выполнить арифметические вычисления над полем ‘val’ (нулевое значение)

Ответ №1:

Ошибка сообщает вам, что detail.val равен нулю. Это означает, что для ключа «val» нет табличного значения. Следовательно, вам не разрешается выполнять с ним какие-либо арифметические операции.

Проблема а)

detail.val является синтаксическим сахаром для detail["val"] . Итак, если вы ожидаете, что val это будет строка, то правильным способом использовать ее в качестве ключа таблицы будет detail[val] .

Возможная проблема b)

Проведя быстрое исследование, я обнаружил, что этот вызов redis может возвращать таблицу, а не строку. Поэтому, если detail[val] не работает, проверьте val тип.

Комментарии:

1. я выясняю, почему значение равно нулю, значение val — это таблица, реальное значение равно val.ok = хэш, набор или другой тип данных ,

2. @user1208081, поэтому вы хотели бы: data[val] = (data[val] or 0) 1