The solution is to use virtual sharding. I don t know Predis framework works but I predict that it uses some kind of array - you probably fill it with information about each shard at start-up.
Assume that you will have maximum of 10 shards (this number should be unlikely to be reached). Then, create sharding array that points to only 3 real servers. In the future when you will add new nodes, you will migrate related data to new shard and change mapping. This approach preserves form changing hash function.
Initial mapping:
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
When you adds new node you only change mapping:
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
so you have to move data with h(x) = 9 or 5 or 2 to node #3.