在您提供的Lua脚本中,ARGV[7]
对应的是调用red_api:eval()
时传入的最后一个参数(即sid
)。具体分析如下:
参数传递规则:
KEYS 和 ARGV 的区分:
eval(script, numkeys, key1, key2..., arg1, arg2...)
- 第3个参数开始的第
numkeys
个属于KEYS
,之后的全属于ARGV
您的调用示例:
red_api:eval(script, 1, KEYS[1], KEYS[2], KEYS[3], KEYS[4], KEYS[5], KEYS[6], KEYS[7], sid)
numkeys = 1
:只有第一个参数是KEYS[1]
- 后续所有参数均为
ARGV
:ARGV[1] = KEYS[2]
ARGV[2] = KEYS[3]
- …
ARGV[6] = KEYS[7]
ARGV[7] = sid
关键结论:
ARGV[7]
的值就是传入的sid
。- 脚本中连续用多个有序集合(ZSET)删除同一个成员(通过
sid
标识),可能是清理分布式环境中的多维度数据。
建议改进:
如果实际需要操作多个KEY,应修正第二个参数为真实的KEY数量。例如:
-- 假设实际需要操作的KEYS数量是7
red_api:eval(script, 7, key1, key2, key3, key4, key5, key6, key7, sid)
此时:
KEYS[1]-KEYS[7] = key1-key7
ARGV[1] = sid
这样可以避免混淆逻辑。
内容由零声教学AI助手提供,问题来源于学员提问