*Redis FUNCTION KILL 命令

FUNCTION KILL 用于终止当前正在执行的函数(Lua 函数)。


*语法

FUNCTION KILL

*参数说明

无参数。


*返回值

  • OK:函数已被终止
  • Error:没有正在执行的函数、权限不足等

*时间复杂度

O(1)

*

*示例

*终止正在执行的函数

> FUNCTION KILL
OK

*没有函数在执行时

> FUNCTION KILL
(error) ERR No scripts in execution right now.

*常见错误

错误 原因 解决
ERR No scripts in execution right now. 当前没有函数在执行 确认有函数正在运行
ERR Could not kill the script. 函数处于不可中断状态 等待函数执行完毕

*最佳实践

  • 场景:终止长时间运行的函数、紧急恢复
  • SCRIPT KILL 的区别:FUNCTION KILL 针对 Redis Functions,SCRIPT KILL 针对 Lua 脚本(EVAL
  • 注意:函数只有在执行写入操作时才可能被杀死,只读函数无法被终止
  • 建议在函数导致性能问题时使用

*FAQ

Q1: FUNCTION KILL 和 SCRIPT KILL 有什么区别? A: FUNCTION KILL 用于 Redis 7.0+ 的函数(Redis Functions),SCRIPT KILL 用于传统的 EVAL/EVALSHA Lua 脚本。

Q2: 为什么有时无法杀死函数? A: 如果函数只执行读取操作(没有修改数据),Redis 认为它是安全的,不允许被杀死。只有执行写入操作的函数才能被终止。

Q3: 杀死函数后数据会回滚吗? A: 不会。函数已经执行的部分操作会被保留,只有剩余未执行的操作会被取消。因此函数应该是幂等的,或者支持部分执行。