ERR redis runtime_error ai_generated true

运行脚本时出错(调用 f_<sha>):@user_script: <line>:Lua 脚本堆栈溢出

ERR Error running script (call to f_<sha>): @user_script: <line>: Stack overflow in Lua script

ID: redis/lua-script-stack-overflow

其他格式: JSON · Markdown 中文 · English
75%修复率
82%置信度
1证据数
2023-04-10首次发现

版本兼容性

版本状态引入弃用备注
redis 7.0 active
redis 7.2 active
redis 6.2 active
redis 5.0 active

根因分析

Lua 脚本超过了最大调用堆栈深度,通常是由于深度递归或过多嵌套函数调用。

English

Lua script exceeded the maximum call stack depth, typically due to deep recursion or excessive nested function calls.

generic

官方文档

https://redis.io/docs/latest/develop/interact/programmability/lua-api/

解决方案

  1. Refactor the Lua script to use iterative loops instead of recursion, e.g., replace recursive function with a while loop:
    while condition do ... end
  2. Reduce the depth of nested function calls by flattening logic or using tail-recursive calls if Lua version supports (Redis Lua 5.1 does not).

无效尝试

常见但无效的做法:

  1. 95% 失败

    Redis does not expose a Lua stack size configuration; the limit is hardcoded.

  2. 50% 失败

    The script execution mechanism is the same; the error is script logic, not caching.

  3. 80% 失败

    Stack overflow is a call depth issue, not a memory allocation issue; more memory does not increase stack depth.