Redis 集群上的 Redis 命令批处理

Redis command batch on a Redis Cluster

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

没有 Lua 个脚本或 MULTI 但有很多 redis.GetDatabase().CreateBatch()。据我所知,批处理只是将管道命令发送到 Redis,但这是否适用于 Redis 集群?

阅读一些文档后,我会说批处理中的每个命令都将单独处理,如果节点将客户端重定向到另一个节点以执行该特定命令,它将由库本身处理。事实上,批处理中的每个命令都有自己的任务返回,所以应该没问题。然而,互联网上有些人声称相反:https://groups.google.com/forum/#!topic/redis-db/1wc9tJSprms

那么我可以期望批处理在 Redis 集群中正常工作吗?

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