Redis怎样向Lua脚本传递动态参数

Redis Lua脚本通过KEYS和ARGV接收参数:KEYS存显式声明的key名,ARGV存动态值参数;必须用ARGV传递所有非key参数,避免拼接注入,并注意字符串类型转换与空值处理。Redis Lua脚本里怎么接收外部传进来的参数Redis 执行 EVAL 或 EVALSHA 时,Lua 脚本能拿到两个固定表:KEYS 和 ARGV。前者存 key 名(必须显式声明),后者存任意值参数------你所有「动态参数」都得走 ARGV。常见错误是把变量直接拼进 Lua 字符串里传,比如用 Python 的 f-string 把用户输入塞进脚本体,这既危险(Lua 注入)又低效(无法缓存 SHA)。正确做法是:脚本写死逻辑,参数全走 ARGV。KEYS 只能用于真正需要 Redis 命令操作的 key,且数量和顺序必须和 EVAL 命令中 key 参数严格一致ARGV 是纯数据容器,支持字符串、数字、nil(但 Redis 客户端通常把 nil 转成空字符串或丢弃)Lua 里访问参数:取第一个动态值用 ARGV1,第二个用 ARGV2,下标从 1 开始用 EVAL 传参时命令格式容易错在哪执行 EVAL 时,key 数量、key 列表、argv 列表三者位置和数量必须对齐,错一个就报 ERR Error running script (call to f_...): @user_script: N: user_script: N: attempt to concatenate a nil value 这类奇怪错误。典型翻车点:忘了数 key 个数,或者把本该进 ARGV 的值误塞进了 key 列表。命令结构固定为:EVAL <script> <numkeys> <key1> <key2> ... <arg1> <arg2> ...numkeys 是 key 的个数,不是总参数个数;它决定了前几个参数被放进 KEYS 表,剩下的全进 ARGV例如:执行 EVAL "return KEYS1..ARGV1" 1 mykey hello → 返回 "mykeyhello";但写成 EVAL "..." 0 mykey hello 就会让 mykey 进 ARGV1,hello 进 ARGV2Lua 脚本里处理 ARGV 类型要注意什么Redis 只传字符串给 Lua,哪怕你传的是数字 123 或布尔 true,到 Lua 里都是字符串。脚本里不能直接拿 ARGV1 > 10 比较,会出错。 标贝科技 标贝科技-专业AI语音服务的人工智能开放平台

相关推荐
这个DBA有点耶21 小时前
MySQL迁移实战:从mysqldump到专业工具的完整选型指南
数据库·mysql·dba
@HNUSTer21 小时前
Python数据可视化科技图表绘制系列教程(八)
python·数据可视化·科技论文·专业制图·科研图表
小白说大模型1 天前
LLM集成数据库的幻觉治理:当AI给出的SQL建议是错的
数据库·人工智能·sql·oracle·重构·开源
专注仿真1 天前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
zcmodeltech1 天前
工程机械与矿山机械沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的露天开采-井下掘进-智慧矿山全场景联动方案
数据库·stm32·单片机·嵌入式硬件·制造·多分类
曹牧1 天前
Oracle:空值排序
数据库·oracle
SelectDB1 天前
Apache Doris 与 StarRocks 深度对比:2026 年 OLAP 引擎选型指南
数据库
lbb 小魔仙1 天前
谁替 AI Agent 记住时间?——从航海钟到智能数据库,三百年时延坍缩史
数据库·人工智能·db
满怀冰雪1 天前
22-使用 PaddleClas 快速训练图像分类模型
人工智能·python·机器学习·分类·数据挖掘·paddlepaddle
这个DBA有点耶1 天前
读懂半连接:IN/EXISTS子查询什么时候快、什么时候慢?
数据库·性能优化·架构