1
canesten 2015-04-27 16:53:07 +08:00 1
参照redis官方文档的个人猜测:
首先redis官方建议你把lua脚本里所有要写的key用参数的方式传递进去 而不是hard code redis会在执行前分析要涉及到key 然后按照类似于multi/exec的语义去执行脚本 在执行eval期间 redis是不响应其他指令的 如果你非得hard code写死 那只能说你的脚本是不兼容集群的 PS:还没用过3.0 不过看文档来说原理应该是这样的 |
2
luin 2015-04-27 17:01:39 +08:00 1
脚本中的所有键必须在 cluster 中的同一个节点中。要想让 script 能在 cluster 下正常工作,必须要把会用到的键名明确指出。这样节点在收到 eval 命令后就能分析出所要操作的键是不是都在一个节点里了,如果是则正常处理,不是就返回 CROSSSLOT 错误。如果不明确指出,比如你的例子,eval 命令发到了 master1 上,那么读 key2 时就会报错了。
|
3
canesten 2015-04-27 17:45:16 +08:00
如楼上所说
lua脚本里涉及的所有的key的hash tag必须都是相同的 |
4
alphaqiu OP |