Решением является использование виртуального шардинга. Я не знаю, как работает Predis, но я предполагаю, что он использует какой-то массив - вы, вероятно, заполняете его информацией о каждом шарде при запуске.
Предположим, что у вас будет максимум 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.