EVAL
Lua スクリプトをサーバ側で実行する。numkeys が 1 以上なら KEYS[1] の shard へルーティングされる。
EVAL script numkeys [key [key ...]] [arg [arg ...]]
計算量
コンパイルのコストと、スクリプト自身の処理量。スクリプト全体が KEYS[1] の shard 上での 1 つの原子的な単位であり、その間その shard をブロックする。暴走を止めるのは命令数の予算(lua time_limit_ms × 40000 命令)であって、実時間ではない。
計算量と互換性は kevy の実装から読み取ったものであり、Redis のドキュメントを写したものではない。実際に異なるものがいくつかある。
Redis との互換性
差異あり
差異あり。-BUSY 状態も SCRIPT KILL も存在しない —— 予算を超えたスクリプトはその場で中断され、通常のエラーとして返る。EVAL の入れ子は拒否する。redis.call が別の shard の key に触れると CROSSSLOT を返す。EVAL はソースを SHA1 で自動キャッシュするため、SCRIPT LOAD なしで EVALSHA が使える。