A resposta para
redis.call
retorna como uma tabela parecida com esta:{"ok": "string"}
(se o tipo for uma string, claro) Portanto, para verificar corretamente, você deve alterar seu código para:
local keyType = redis.call("TYPE", KEYS[1]).ok
e o resto do código funcionará bem.
A questão é esta:o comando TYPE é um dos poucos comandos que retornam uma resposta redis de "string simples" ou "status" (consulte as especificações do protocolo redis para os tipos de resposta). Na documentação do redis lua afirma-se que:
Redis status reply -> Tabela Lua com um único campo ok contendo o status
Que foi o que aconteceu aqui.