我有一个 Redis 集群 v7.x,有 3 个主节点,每个主节点有 1 个从节点。
用 Lua 脚本编写的函数
myFunction
已加载到所有 3 个 master 中。
该函数是否可以访问数据结构,例如存储在另一个主节点上的
SortedSet
?
这是必需的,因为来自不同客户端的调用可能会被重定向到任何节点,并且那里的函数定义需要访问特定的数据结构,而该数据结构可能不在处理客户端请求的同一节点上。
不可以,函数只能访问它所调用的分片上的键。如果您尝试访问不同分片上的密钥,您将收到
MOVED
或 CROSSSLOT
错误。
也就是说,对于听起来你正在做的事情,你不必担心这些。
每次调用
FCALL
时,您指定函数访问的键,客户端负责将命令定向到适当的分片。因为听起来您只使用一个键,所以这应该不是问题。
但是,如果您想访问函数中的多个键,则必须确保它们位于同一个哈希槽中,这样就不会遇到跨槽问题。请参阅 Redis 集群规范中的 Hash Tags,它解释了如何确保正确确定键名的范围,从而保证它们位于正确的分片上。