Predis声称具有客户端的碎片(支持一致的钥匙哈希)。 http://github.com/nrk/predis

我可以使用连接到一系列配置文件(节点)的连接来进行碎片,但是它并不一致。当我在池中添加另一个节点时,找不到一些键。有人对此有任何经验吗?

使用PHP 5.2(以及Redis的PHP 5.2版本)。

有帮助吗?

解决方案

看起来像域\ sn_spappprod帐户的权限问题。它是否具有必要的权限与SQL登录?如果您有多个服务器场,您是否在每个服务器上都有别名?

一个很好的技巧,看看你的用户是否有访问是使用testfile,请参阅本文如何做到这一点。如果该测试返回任何错误,则与SQL Server的连接是可以的 - 在运行测试时务必使用别名名称Server2。

如果测试返回错误,则您的别名可能未在服务器上正确配置。

也可能是您的帐户没有运行配置向导的所需权限。请参阅本文

其他提示

解决方案是使用虚拟碎片。我不知道Predis Framework有效,但我预计它使用了某种数组 - 您可能会在启动时填充有关每个碎片的信息。

假设您最多有10片(不太可能达到此数字)。然后,创建仅指向3个真实服务器的碎片数组。将来,当您添加新节点时,您会将相关数据迁移到新的碎片和更改映射。这种方法保留了更改哈希功能的形式。

初始映射:

0 => 0 //node #0
1 => 0
2 => 0
3 => 1 //node #1
4 => 1
5 => 1
6 => 2 //node #2
7 => 2
8 => 2
9 => 2

当您添加新节点时,您只会更改映射:

0 => 0
1 => 0
2 => 3 // new node #3
3 => 1
4 => 1
5 => 3 // new node #3
7 => 2
8 => 2
9 => 3 // new node #3

因此,您必须使用H(X)= 9或5或2将数据移至节点#3。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top