kevy4.0

EVAL

在服务端执行一段 Lua 脚本;当 numkeys >= 1 时,路由到 KEYS[1] 所在的 shard。

EVAL script numkeys [key [key ...]] [arg [arg ...]]
分组
脚本
起始版本
1.0.0
参数个数
至少 3 个
标志
write

复杂度

O(编译 + 脚本自身的开销)。整段脚本在 KEYS[1] 所在的 shard 上作为一个原子单元执行,执行期间独占那个 shard。失控保护用的是指令预算(lua time_limit_ms x 40000 条指令),不是墙钟时间。

复杂度与兼容性是从 kevy 的实现里读出来的,不是抄 Redis 的文档。有几条确实不一样 —— 它们看起来像笔误,但不是。

与 Redis 的兼容性

有差异

有差异:没有 -BUSY 状态,也没有 SCRIPT KILL —— 超预算的脚本就地中止,并以一个普通错误应答;嵌套 EVAL 会被拒绝;redis.call 碰到别的 shard 上的 key 会返回 CROSSSLOT;EVAL 会按 SHA1 自动缓存源码,所以不做 SCRIPT LOAD 也能直接 EVALSHA。

另见

EVALSHASCRIPT

← 返回全部命令