redis.call
への応答 次のようなテーブルとして返されます:{"ok": "string"}
(もちろんタイプが文字列の場合)
したがって、適切にチェックするには、コードを次のように変更する必要があります。
local keyType = redis.call("TYPE", KEYS[1]).ok
残りのコードは正常に機能します。
問題は次のとおりです。TYPEコマンドは、「単純な文字列」または「ステータス」のredis応答を返す数少ないコマンドの1つです(応答タイプについては、redisプロトコルの仕様を参照してください)。 redis luaのドキュメントには、次のように記載されています。
ステータス応答を再実行する->ステータスを含む単一のokフィールドを持つLuaテーブル
これがここで起こったことです。