La respuesta a redis.call
regresa como una tabla que se ve así:{"ok": "string"}
(si el tipo es una cadena, por supuesto)
Entonces, para verificar correctamente, debe cambiar su código a:
local keyType = redis.call("TYPE", KEYS[1]).ok
y el resto del código funcionará bien.
El problema es este:el comando TYPE es uno de los pocos comandos que devuelven una respuesta redis de "cadena simple" o "estado" (consulte las especificaciones del protocolo redis para los tipos de respuesta). En la documentación de redis lua se afirma que:
Respuesta de estado de Redis -> Tabla Lua con un solo campo ok que contiene el estado
Que es lo que pasó aquí.