我们使用StackExchange.Redis来访问一个常规的Redis数据库。现在,我们希望将该数据库设置为集群,因此我们正在检查代码,以确保没有MULTI或Lua脚本可能会因为跨节点的密钥分发而中断。
没有Lua脚本或MULTI,但有很多redis.GetDatabase().CreateBatch()。据我所知,批处理只是将命令流水线发送到Redis,但这是否适用于Redis集群?
在阅读了一些文档后,我想说批处理中的每个命令都将被单独处理,如果节点将客户端重定向到另一个节点来执行该特定命令,那么它将由库本身处理。实际上,批处理中的每个命令都有自己的Task返回,所以应该没问题。然而,互联网上的一些人却持相反的观点:https://groups.google.com/forum/#!topic/redis-db/1wc9tJSprms
那么,我可以期望批处理在Redis集群中正常工作吗?
发布于 2020-03-02 17:39:30
应该能行得通。在内部,RedisBatch.Execute将排队的命令拆分到每个目标组中(保持每个组的原始顺序),然后分别刷新每个组;因此,它确实考虑了这种情况,并尝试尽可能地将它们放在一起,以避免数据包碎片和交错消息等。如果涉及的键意味着这最终会与3个不同的服务器进行对话,那么就这样吧。它将涉及更多的数据包,而不是只与一台服务器通信,但是...您最终还需要3个服务器CPU来处理工作,因此...正反两面都有。但从根本上说:是的,它应该是有效的。
https://stackoverflow.com/questions/60452554
复制相似问题