EVAL

执行服务器端Lua脚本。

语法

EVAL script numkeys [key [key ...]] [arg [arg ...]]

引入版本:2.6.0

复杂度摘要:—

[!NOTE] 此命令的行为在集群 Redis 环境中有所不同。请参阅 多键操作 页面了解更多信息。

使用嵌入式 Redis Lua 5.1 解释器执行服务器端 路亚 脚本。第一个参数是脚本的源代码。

第二个参数是输入键名称参数的数量,后面是脚本访问的所有键。这些输入键名称可作为 KEYS 全局运行时变量 供脚本使用。任何附加输入参数不应代表键的名称。

重要: 为了确保脚本的正确执行,无论是在独立部署还是集群部署中,脚本访问的所有键都必须显式提供作为输入键参数。脚本应该只访问其名称作为输入参数给出的键。脚本永远不应访问具有以编程方式生成的名称或基于数据库中存储的数据结构内容的键。

注意: 在某些情况下,用户会通过在脚本中嵌入值而不是将它们作为参数提供来滥用 Lua EVAL,从而在每次调用 EVAL 时生成不同的脚本。这些值被添加到 Lua 解释器中并缓存在 Redis 中,随着时间的推移会消耗大量内存。

从 Redis 7.4 开始,当缓存达到一定大小时,Redis 会从脚本缓存中逐出加载有 EVAL 或 EVAL_RO 的脚本。 Redis 首先驱逐最近最少使用的脚本。您可以通过 INFO 中的 evicted_scripts 字段查看被逐出的脚本数量。

有关Lua脚本的更多信息,请参阅Redis 可编程性和Eval 脚本简介。

必需参数

script

要评估的Lua脚本。

numkeys

后面的键名称的数量。键后面的参数作为常规参数传递。

可选参数

key [key ...]

脚本访问的键名,通过 Lua 全局 KEYS 运行时变量提供给它。其中必须正好有 numkeys 个。

arg [arg ...]

通过 Lua ARGV 变量向脚本提供其他参数。

示例

以下示例将运行一个脚本,该脚本返回它获取的第一个参数。

> EVAL "return ARGV[1]" 0 hello
"hello"

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动

返回值

RESP2

返回值取决于执行的脚本。

RESP3

返回值取决于执行的脚本。

资料来源:Redis 官方 EVAL 文档;中文内容参考 Redis 文档许可。