为什么在调用Redis Lua脚本时有KEYS和ARGV数组?

use*_*521 17 redis

从Redis中调用Lua脚本时,可以在两个数组中传递值:KEYS和ARGV.有什么不同?Redis如何处理KEYS数组中的值?如果在我的脚本中,我必须使用在运行时动态生成的密钥,该怎么办?

Ita*_*ber 21

您的所有问题都在EVAL页面上得到解答,但自从您提出问题后:

有什么不同?

KEYS用于传递键名,而ARGS应该是其他任何东西.这并没有完全执行(即大多数时候你可以将它们混合)但如果不遵循则可能导致潜在的问题.

Redis如何处理KEYS数组中的值?

KEYS检查内容以验证所有密钥是否可用于运行脚本的Redis分片.此机制适用于允许在Redis群集部署中运行脚本.

如果在我的脚本中,我必须使用在运行时动态生成的密钥,该怎么办?

看到以前的答案 - 这是可行的,但你反对的建议.您的脚本只能在独立的Redis实例上运行,并且由于未指定此行为,因此在将来的版本中可能会中断.

  • `您的脚本仅在独立的 Redis 实例上运行是安全的,并且由于未指定此行为,因此它可能会在未来的版本中中断。` 这似乎严重限制了 lua 脚本的实用性...... (2认同)