Redis集群上的Redis命令批处理

时间:2020-02-28 13:14:48

标签: redis stackexchange.redis redis-cluster

我们正在使用StackExchange.Redis访问常规Redis数据库。现在我们想将该数据库设置为集群,因此我们正在检查代码,以确保没有MULTI或Lua脚本可能会因为在节点之间的密钥分布而中断。

没有Lua脚本或MULTI,但是有很多redis.GetDatabase().CreateBatch()。据我所知,批处理只是将流水线的命令发送到Redis,但这可以在Redis Cluster中使用吗?

在阅读了一些文档之后,我会说批处理中的每个命令将被分别处理,并且如果该节点将客户端重定向到该特定命令的另一个节点,它将由库本身处理。实际上,批处理中的每个命令都有其自己的任务返回,因此应该可以。但是,互联网上有些人声称相反:https://groups.google.com/forum/#!topic/redis-db/1wc9tJSprms

所以我可以期望批处理在Redis Cluster中正常工作吗?

1 个答案:

答案 0 :(得分:1)

应该可以。在内部,RedisBatch.Execute将排队的命令分为每个目标组(保持每个组的原始顺序),然​​后分别刷新每个目标;因此,它确实考虑了这种情况,并尝试将它们尽可能地保持在一起,以避免数据包碎片和交织的消息等。如果所涉及的密钥意味着最终与3个不同的服务器进行通信,那么也是如此。与仅与一台服务器通信相比,它将涉及更多的数据包,但是……您最终还需要3个服务器CPU来处理工作,因此……各有利弊。但从根本上说:是的,它应该可以工作。