题
Predis声称具有客户端的碎片(支持一致的钥匙哈希)。 http://github.com/nrk/predis
我可以使用连接到一系列配置文件(节点)的连接来进行碎片,但是它并不一致。当我在池中添加另一个节点时,找不到一些键。有人对此有任何经验吗?
使用PHP 5.2(以及Redis的PHP 5.2版本)。
其他提示
解决方案是使用虚拟碎片。我不知道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。
不隶属于 StackOverflow