1
Predis有什么方法可以在创建实例时手动定义集群插槽,以避免随机选择服务器并获取插槽配置,因此请求会立即直接发送到正确的服务器该过程更快?Predis集群插槽手动设置
Predis有什么方法可以在创建实例时手动定义集群插槽,以避免随机选择服务器并获取插槽配置,因此请求会立即直接发送到正确的服务器该过程更快?Predis集群插槽手动设置
是的,你可以做到这一点使用连接参数:
$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
嗨,从我测试的...这比让Predis获得插槽配置要快,但并不像连接到集群单节点那样快,直接从那里获取数据(我事先知道数据在该节点)。 Predis,事先知道插槽可以做单个连接(取决于关键的CRC16)以提高速度吗?谢谢! – diegotez
您可能提前知道该插槽,但不知道与其关联的节点,因为redis-cluster可以并在需要时自动重新平衡。即使通过连接参数预先配置插槽映射实际上也是一个最好的猜测,它应该保持更新才能生效。 – nrk
也许你可以尝试这样的事情https://gist.github.com/nrk/e1463f6c81f4f70427f9fab2ef202777 它没有测试,因为我要通过内存,但它应该工作,你基本上配置客户端与你的插槽地图,然后您将底层连接提取到特定插槽,并从该连接实例中创建新的客户端实例。这与Predis已经在内部完成的事情没有什么不同。 – nrk