BUSY: BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE(Redis 正忙于运行脚本。只能调用 SCRIPT KILL 或 SHUTDOWN NOSAVE)
Redis含义
一个长时间运行的 Lua 脚本或函数正在执行,并已超过 busy-reply-threshold(Redis 7 之前名为 lua-time-limit;默认 5000 ms)。由于 Redis 是单线程的,在此期间无法处理其他命令;只接受 SCRIPT KILL(函数为 FUNCTION KILL)或 SHUTDOWN NOSAVE。
原因
无限循环或运行时间非常长的 Lua 脚本/函数、繁重的计算、遍历大量数据的脚本,或编写不当的 EVAL 调用。
解决方法
如果脚本尚未修改数据,停止它:SCRIPT KILL。如果脚本已经执行了写入,SCRIPT KILL 无效;作为保持数据一致性的最后手段,可能需要 SHUTDOWN NOSAVE(未保存的数据会丢失;务必谨慎)。将脚本写得简短且确定。将长操作拆分为多个块。检查 busy-reply-threshold(原 lua-time-limit)设置。
同一数据库的其他条目
- MASTERDOWNMASTERDOWN Link with MASTER is down and replica-serve-stale-data is set to 'no'(与 MASTER 的连接已断开,且 replica-serve-stale-data 设为 'no')
- CLUSTERDOWNCLUSTERDOWN The cluster is down / Hash slot not served(集群已宕机 / 哈希槽未被服务)
- LOADINGLOADING Redis is loading the dataset in memory(Redis 正在将数据集加载到内存中)
- MISCONFMISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk(Redis 已配置为保存 RDB 快照,但当前无法持久化到磁盘)
- CROSSSLOTCROSSSLOT Keys in request don't hash to the same slot(请求中的键未哈希到同一槽)
- MOVEDMOVED slot ip:port(集群重定向)
- ASKASK slot ip:port(集群重定向)