一、命令介绍
·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 版本可在只读副本执行)。
更多信息请参见 Valkey 产品文档:Scripting 命令组。
二、命令支持概览
·基础命令: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 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | — |