2017-06-02 109 views
1

Predis有什么方法可以在创建实例时手动定义集群插槽,以避免随机选择服务器并获取插槽配置,因此请求会立即直接发送到正确的服务器该过程更快?Predis集群插槽手动设置

回答

0

是的,你可以做到这一点使用连接参数:

$client = new Predis\Client([ 
    'tcp://node01?slots=0-5460', 
    'tcp://node02?slots=5461-10922', 
    'tcp://node03?slots=10923-16383', 
], ['cluster' => 'redis']); 

的“缝隙”连接参数可以接受一个逗号分隔的单插槽和连续的插槽范围,例如列表:

tcp://node01?slots=0,20-30,5461-10922 
+0

嗨,从我测试的...这比让Predis获得插槽配置要快,但并不像连接到集群单节点那样快,直接从那里获取数据(我事先知道数据在该节点)。 Predis,事先知道插槽可以做单个连接(取决于关键的CRC16)以提高速度吗?谢谢! – diegotez

+0

您可能提前知道该插槽,但不知道与其关联的节点,因为redis-cluster可以并在需要时自动重新平衡。即使通过连接参数预先配置插槽映射实际上也是一个最好的猜测,它应该保持更新才能生效。 – nrk

+0

也许你可以尝试这样的事情https://gist.github.com/nrk/e1463f6c81f4f70427f9fab2ef202777 它没有测试,因为我要通过内存,但它应该工作,你基本上配置客户端与你的插槽地图,然后您将底层连接提取到特定插槽,并从该连接实例中创建新的客户端实例。这与Predis已经在内部完成的事情没有什么不同。 – nrk