Svaret på redis.call
returnerar som en tabell som ser ut så här:{"ok": "string"}
(om typen är en sträng förstås)
Så för att kontrollera ordentligt bör du ändra din kod till:
local keyType = redis.call("TYPE", KEYS[1]).ok
och resten av koden kommer att fungera bra.
Problemet är detta:TYPE-kommandot är ett av få kommandon som returnerar ett "enkel sträng" eller "status" redis-svar (se redis-protokollets specifikationer för svarstyperna). I redis lua-dokumentationen står det att:
Redis statussvar -> Lua-tabell med ett enda ok-fält som innehåller status
Vilket är vad som hände här.