redis分片,流水线和往返

时间:2012-05-09 11:08:30

标签: redis sharding pipelining

假设在您的Web应用程序中,您需要执行一些redis调用来呈现页面,例如,获取大量用户哈希值。为了加快速度,你可以将你的redis命令包装在MULTI / EXEC部分,从而使用流水线技术,这样你就可以避免多次往返。但是你也想对你的数据进行分片,因为你有很多数据和/或你想分发写入。然后流水线操作不起作用,因为不同的密钥可能会存在于不同的节点上,除非您清楚地了解应用程序的数据布局和基于角色的分片而不是使用散列函数。那么,由于联系了许多服务器以完成“概念上独特”的工作,在不影响性能的情况下,在不同服务器之间对数据进行分片的最佳做法是什么?我相信答案取决于正在开发的Web应用程序,我最终会进行一些测试,但知道其他人如何应对我提到的权衡取舍会有所帮助。

1 个答案:

答案 0 :(得分:4)

MULTI / EXEC和流水线是两回事。您可以在没有任何流水线的情况下执行MULTI / EXEC,反之亦然。

如果要同时进行分片和管道分割,则需要将操作分组到每个Redis实例的管道,然后对每个实例使用管道传输。

以下是使用Ruby的简单示例:https://gist.github.com/2587593

进一步提高性能的一种方法是在对操作进行分组后并行化Redis实例上的流量(即,您将操作分组,将它们并行发送到所有实例,等待所有实例的答案)。

这有点复杂,因为需要异步非阻塞客户端。为了获得最佳性能,应在客户端使用C / C ++。这可以通过使用hiredis +您选择的事件循环轻松实现。