idr*_*rig 6 sharding pipelining redis
假设在您的Web应用程序中,您需要执行一些redis调用来呈现页面,例如,获取大量用户哈希值.为了加快速度,你可以将你的redis命令包装在MULTI/EXEC部分,从而使用流水线技术,这样你就可以避免多次往返.但是你也想对你的数据进行分片,因为你有很多数据和/或你想分发写入.然后流水线操作不起作用,因为不同的密钥可能存在于不同的节点上,除非您清楚地了解应用程序的数据布局和基于角色的分片而不是使用散列函数.那么,由于联系了许多服务器以完成"概念上独特"的工作,在不影响性能的情况下,在不同服务器之间对数据进行分片的最佳做法是什么?我相信答案取决于正在开发的Web应用程序,我最终会进行一些测试,但知道其他人如何应对我提到的权衡取舍会有所帮助.
MULTI/EXEC 和流水线是两个不同的东西。您可以在没有任何管道的情况下执行 MULTI/EXEC,反之亦然。
如果要同时进行分片和管道化,则需要将操作分组到每个 Redis 实例的管道化,然后对每个实例使用管道化。
这是一个使用 Ruby 的简单示例: https: //gist.github.com/2587593
进一步提高性能的一种方法是在操作分组后并行化 Redis 实例上的流量(即对操作进行分组,将它们并行发送到所有实例,等待所有实例的答案)。
这有点复杂,因为需要异步非阻塞客户端。为了获得最大性能,应在客户端使用 C/C++。这可以通过使用hiredis +您选择的事件循环轻松实现。
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |