ERR Lua script attempted to access nonexistent global variable: Lua script attempted to access a nonexistent global variable
RedisЧто это значит?
Lua-скрипт, запущенный через EVAL/EVALSHA, попытался обратиться к неопределённой глобальной переменной. Чтобы защитить среду выполнения скриптов, Redis ограничивает создание/чтение глобальных переменных и возвращает такое обращение как ошибку.
Почему возникает?
Случайное использование глобальной переменной вместо локальной в скрипте (забыто ключевое слово local); обращение к неопределённому имени из-за опечатки; либо попытка хранить состояние в глобальной переменной. Изолированная среда Lua в Redis этого не допускает.
Как исправить
Объявляйте все переменные в скрипте через local: local x = ... Исправьте опечатки; убедитесь, что каждая переменная определена до использования. Скрипты должны быть без состояния; для постоянного состояния используйте ключи Redis (KEYS/redis.call), а не глобальные переменные Lua. Делайте скрипт коротким и детерминированным.
Ещё по этой СУБД
- NOPROTO unsupported protocol versionUnsupported RESP protocol version
- ERR Unknown option or number of arguments for CONFIG SETUnknown option or number of arguments for CONFIG SET (older versions: Unsupported CONFIG parameter)
- ERR MULTI calls can not be nestedMULTI calls can not be nested
- ERR unknown commandUnknown command
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster)
- ERR DISCARD without MULTIDISCARD without MULTI
- BUSYGROUP Consumer Group name already existsConsumer group already exists