Когда я использую lua-скрипт в Redis, я столкнулся с проблемой, которую не могу понять.
Например, у меня есть ключ «тест», его значение равно 2, а его кодировка — int:
127.0.0.1:6379> set test 2
OK
127.0.0.1:6379> object encoding test
"int"
но когда я использую ключ в скрипте lua, его тип в lua становится строкой:
127.0.0.1:6379> eval "local a = redis.call('get', 'test'); return type(a);" 0
"string"
Почему redis преобразует ключ кодировки в строку в lua?
@for_stack превратите комментарий в ответ, и я проголосую за него
@for_stack Спасибо. Ну, я думаю, что большинство типов значений команд Redis являются строковыми, поэтому я всегда получаю строковый тип в lua.
@ItamarHaber Хорошо, я сделаю это. B.T.W давно не виделись :)
@nethibernate Есть и другие типы, подробности смотрите в моем ответе.
@for_stack да, завален задачами и не успел здесь провести. Теперь, когда RedisConf19 закончился, я могу вернуться к нормальной жизни :)
Тип значения команды SET
— STRING, хотя ее внутренняя кодировка — INT (для экономии памяти и производительности).
Фактически, на основе Протокол Redis существует 5 типов возвращаемых значений. Вы можете проверить руководство для возвращаемого типа каждой команды. Также проверьте файл преобразование между типами данных Lua и Redis.
Потому что тип значения команды
SET
— НИТЬ, хотя ее внутренняя кодировка — INT.