2

Redis 文档建议我将键名指定为脚本的参数并在脚本中读取它们,而不是在脚本中硬编码它们。如果我在调用脚本时知道名称,这会很好。

就我而言,我的键名存储在 Redis 对象(哈希)中,我需要根据参数检索一些哈希条目,然后以原子方式访问这些键。

有人对如何使其以合规方式工作有任何想法吗?

4

2 回答 2

1

我遇到了同样的问题。正如您所提到的,Redis EVAL 命令文档告诉:

脚本使用的所有键都应使用 KEYS 数组传递,方式如下:

eval "return redis.call('set',KEYS 1 ,'bar')" 1 foo OK

以正确方式传递键的原因是,在 EVAL 之前,可以在执行之前分析所有 Redis 命令,以确定该命令将操作哪些键。

但后来在同一文档中写道:

为了使 EVAL 成为真的,键也必须是显式的。这在很多方面都很有用,尤其是为了确保 Redis Cluster 能够将您的请求转发到适当的集群节点(Redis Cluster 正在进行中,但脚本功能的设计是为了很好地使用它) . 但是,此规则并未强制执行,以便为用户提供滥用 Redis 单实例配置的机会,代价是编写与 Redis 集群不兼容的脚本。


综上所述,在使用 Redis Cluster 时,以正确的方式传递 key是相关的,因此 Redis 集群机制知道你在操作什么数据,并且由于它,它知道你的数据在哪里。

当您不想使用 Redis Cluster 或以其他方式实现集群时,以正确的方式传递密钥不是强制性的。

于 2014-12-21T13:05:39.090 回答
0

您的原子访问是否需要在从哈希中读取键名的操作中产生,还是仅在您读取键名并准备进一步使用它之后才需要?

如果你需要它,然后使用 Lua 脚本从哈希中读取键名,将其存储在一个变量中,然后在根据该键名获取数据时进一步使用它。如果您只需要第二部分的原子性,请首先读取键名,然后将其用作 Redis 文档为第二部分建议的参数。

于 2013-08-04T02:38:28.517 回答