Redis 对于eval,密钥名是不预先知道的
Redis文档建议我将键名指定为脚本的参数,并在脚本中读取它们,而不是在脚本中硬编码它们。如果我在调用脚本时知道这些名称,那么这样做很好 在我的例子中,我的密钥名存储在Redis对象(散列)中,我需要根据参数检索一些散列条目,然后以原子方式访问这些密钥Redis 对于eval,密钥名是不预先知道的,redis,Redis,Redis文档建议我将键名指定为脚本的参数,并在脚本中读取它们,而不是在脚本中硬编码它们。如果我在调用脚本时知道这些名称,那么这样做很好 在我的例子中,我的密钥名存储在Redis对象(散列)中,我需要根据参数检索一些散列条目,然后以原子方式访问这些密钥 有人对如何使其以兼容的方式工作有任何想法吗?您的原子访问是否需要在从散列中读取密钥名的过程中产生,还是只有在您读取了密钥名并准备进一步使用它之后才需要 如果您需要它,那么使用Lua脚本从散列中读取键名,将其存储在变量中,然后在根据该键名获取数据时
有人对如何使其以兼容的方式工作有任何想法吗?您的原子访问是否需要在从散列中读取密钥名的过程中产生,还是只有在您读取了密钥名并准备进一步使用它之后才需要
如果您需要它,那么使用Lua脚本从散列中读取键名,将其存储在变量中,然后在根据该键名获取数据时进一步使用它。如果第二部分只需要原子性,请首先读取键名,然后将其用作参数,正如Redis文档对第二部分所建议的那样。我也遇到了同样的问题。正如您所提到的,文档说明: 脚本使用的所有键都应该使用这些键传递 数组,按以下方式: 评估“返回redis.call('set',key,'bar')”1 foo OK 以正确的方式传递密钥的原因是,在评估所有 可以在执行之前分析Redis命令,以便 确定命令将在哪些键上操作 但在同一份文件的后面部分,写的是: 为了使EVAL的结果为真,键也必须是显式的。这 在许多方面都很有用,但特别是为了确保Redis 群集能够将您的请求转发到相应的群集 节点(Redis群集)正在开发中,但脚本功能 是为了更好地使用它而设计的)。然而,这一规则并非如此 强制执行,以便为用户提供滥用 Redis单实例配置,以编写脚本为代价 与Redis群集不兼容
总之,以正确的方式传递密钥在您使用Redis Cluster时是相关的,因此Redis群集机制知道您操作的是什么数据,并且由于它,它知道您的数据在哪里
当您不想使用Redis Cluster或在中实现群集时,以正确的方式传递密钥不是强制性的。谢谢。我需要它全是原子的。是的,当然我知道我需要从散列中读取密钥名,然后使用它们。问题是
EVAL
不知道脚本将使用什么键名,因此无法安排在集群中的正确节点上对脚本求值。并不是说我在使用集群,但这个问题在这一点上是相当理论化的。