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 里访问参数取第一个动态值用 ARGV[1]第二个用 ARGV[2]下标从 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 KEYS[1]..ARGV[1] 1 mykey hello → 返回 mykeyhello但写成 EVAL ...” 0 mykey hello 就会让 mykey 进 ARGV[1]hello 进 ARGV[2]Lua 脚本里处理 ARGV 类型要注意什么Redis 只传字符串给 Lua哪怕你传的是数字 123 或布尔 true到 Lua 里都是字符串。脚本里不能直接拿 ARGV[1] 10 比较会出错。 标贝科技 标贝科技-专业AI语音服务的人工智能开放平台
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2524671.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!