命令介绍
Scripting and Functions 族命令用于在服务端执行 Lua 脚本和管理可复用函数库,适用于需要多步骤原子操作、减少网络往返、或实现复杂业务逻辑下沉到数据层的场景。其核心命令按功能可分为以下三类:
Lua 脚本执行
EVAL / EVALSHA:在服务端原子性执行一段 Lua 脚本(所有操作在同一事件循环中完成,不会被其他命令打断)。EVAL 直接传入脚本源码,EVALSHA 通过 SHA1 哈希调用已缓存的脚本。
EVAL_RO / EVALSHA_RO(Redis 7.0+):只读副本可执行的版本,用于从节点上的只读脚本操作。
脚本缓存管理
SCRIPT LOAD:将脚本加载到服务端缓存并返回 SHA1 哈希。
SCRIPT EXISTS:检查脚本是否存在于缓存中。
SCRIPT FLUSH:清空所有脚本缓存。
SCRIPT KILL:终止正在执行的长时间运行脚本。
Functions 函数库(Redis 7.0+ / Valkey 8.0+)
Functions 机制将脚本升级为命名函数库,支持持久化存储与主从复制,提供更好的可维护性和版本管理能力。
FUNCTION LOAD / FUNCTION DELETE / FUNCTION FLUSH:加载、删除或清空函数库。
FUNCTION LIST / FUNCTION DUMP / FUNCTION RESTORE:列出、导出或导入函数库。
FUNCTION STATS:查看函数执行统计。
FCALL / FCALL_RO:调用已注册的命名函数(RO 版本可在只读副本执行)。
命令支持概览
基础命令:
eval、evalsha、script exists、script flush、script load、script kill,Redis 2.8标准架构及4.0、5.0、6.2、7.0版本、Valkey 8.0、9.0的标准架构与集群架构均支持。7.0+ 新增命令:
eval_ro、evalsha_ro、function delete、function dump、function flush、function kill、function list、function load、function restore、function stats、fcall、fcall_ro,仅 Redis 7.0 版本及 Valkey 8.0、9.0 版本支持。其中 eval_ro、evalsha_ro 为只读副本执行版本,fcall、fcall_ro 用于调用自定义函数。全局不支持:
script debug 在所有版本与架构中均不支持。跨 Slot 限制:集群架构下,
eval、evalsha、script exists 不支持跨 Slot 操作,操作的 Key 必须落在同一个 Slot 上。命令兼容性矩阵
Scripting and Functions 族命令在各版本与架构下的支持情况如下表所示(✓ 表示支持,✗ 表示不支持,— 表示该命令不存在跨 Slot 访问场景)。
说明:
eval_ro 与 evalsha_ro 为只读命令,可在只读副本中执行 Lua 脚本;function 系列命令用于管理 Redis 自定义函数库。以上命令仅 Redis 7.0 及 Valkey 8.0、9.0 支持。命令 | Valkey 9.0标准架构 | Valkey 9.0集群架构 | Redis 7.0/Valkey 8.0标准架构 | Redis 7.0/Valkey 8.0集群架构 | Redis 6.2标准架构 | Redis 6.2集群架构 | Redis 5.0标准架构 | Redis 5.0集群架构 | Redis 4.0标准架构 | Redis 4.0集群架构 | Redis 2.8标准架构 | 集群架构跨 Slot 支持 |
eval | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
eval_ro | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
evalsha | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
evalsha_ro | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
script debug | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
script exists | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
script flush | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — |
script load | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — |
script kill | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — |
function delete | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function kill | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function dump | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function flush | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function list | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function load | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function restore | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
function status | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
fcall | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |
fcall_ro | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |