SCRIPT 是 Redis Lua 脚本管理的入口命令,提供加载、检查、清空、终止和调试脚本等功能。
SCRIPT LOAD script
SCRIPT EXISTS sha1 [sha1 ...]
SCRIPT FLUSH [ASYNC | SYNC]
SCRIPT KILL
SCRIPT DEBUG (YES | NO | SYNC)
SCRIPT HELP
| 子命令 | 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| LOAD | script | String | 是 | Lua 脚本源码 |
| EXISTS | sha1 | String | 是 | 脚本的 SHA1 摘要,支持多个 |
| FLUSH | ASYNC / SYNC | Flag | 否 | 异步或同步清空缓存,默认 SYNC |
| KILL | 无 | — | — | 终止当前执行的脚本 |
| DEBUG | YES / NO / SYNC | Flag | 是 | 调试模式开关 |
| HELP | 无 | — | — | 返回帮助信息 |
> SCRIPT LOAD "return redis.call('GET', KEYS[1])"
"6b1bf486c81c7fb1b5c5c7a9e8d5f5c5c5c5c5c5"
> SCRIPT EXISTS "6b1bf486c81c7fb1b5c5c7a9e8d5f5c5c5c5c5c5" "badsha1"
1) (integer) 1
2) (integer) 0
> SCRIPT FLUSH
OK
> SCRIPT FLUSH ASYNC
OK
> SCRIPT KILL
OK
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少必要参数 | 检查子命令语法 |
| ERR Unknown SCRIPT subcommand | 子命令拼写错误 | 使用 LOAD/EXISTS/FLUSH/KILL/DEBUG/HELP |
| ERR Sorry the script already wrote to the DB | KILL 时脚本已执行写操作 | 只能 SHUTDOWN NOSAVE 终止 |
Q1: SCRIPT FLUSH 会清除所有脚本吗? A: 是。清空当前实例的 Lua 脚本缓存,所有 EVALSHA 将返回 NOSCRIPT 错误。
Q2: 脚本缓存有大小限制吗? A: 没有硬性限制,但缓存的脚本占用内存,不用的脚本应定期清理。
Q3: SCRIPT LOAD 后脚本会永久保留吗? A: 是的,直到执行 SCRIPT FLUSH 或实例重启。Redis 不会自动淘汰已加载的脚本。