mirror of
https://github.com/predis/predis.git
synced 2026-08-22 13:41:57 +00:00
2ff8c37104
This change actually had a positive impact on the design of the whole internals for clustering which is now cleaner and easier to maintain. It is still far from perfect, but we also have to keep performances in consideration so we can say that we ended up with a good compromise. Previously Predis assigned an hash to each command instance which was computed from its key, now we changed approach and the library caches the slot assigned to each command. This works for both our client-side sharding cluster and the upcoming redis-cluster, but the former is the one that needed most changes. The PredisCluster aggregate connection now only takes an instance of StrategyInterface, which in turn wraps the chosen distributor. After all, in order to be able to calculate the assigned slot for a command or key, the cluster strategy must have access to the distributor that manages the distribution of the whole keyspace. Nothing really changes in terms of configurability as it is still possible to decide which distributor to use for client-side sharding, it is simply different: $distributor = new Predis\Cluster\Distribution\KetamaRing(); $strategy = new Predis\Cluster\PredisStrategy($distributor); $cluster = new Predis\Connection\Aggregate\PredisCluster($strategy); As for the RedisCluster aggregate connection, the only change is that the mathematical operation of calculating the assigned slot from a key has been completely moved inside the cluster strategy instance. The strategy for redis-cluster does not use external distributors so trying to StrategyInterface::getDistributor() will throw an exception. This may change in future releases, but this is not a priority since redis-cluster relies on a fixed, well-defined distribution mechanism.