bug #30515 [Cache] Only delete one key at a time when on Predis + Cluster (andrerom)

This PR was merged into the 3.4 branch.

Discussion
----------

[Cache] Only delete one key at a time when on Predis + Cluster

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| License       | MIT

Makes sure deletes when on Predis  Cluster is only done one by one as it's not able to send the keys to right cluster node like RedisCluster can.

_This is backport of logic from 4.x to fix this. With one tweak; make sure to only do this when on cluster so not all Predis users pay the penalty for it._

Commits
-------

f5ece20a83 [Cache] Only delete one key at a time when on Predis + Cluster
This commit is contained in:
Nicolas Grekas 2019-03-11 13:58:49 +01:00
commit 21d01973f7
1 changed files with 11 additions and 1 deletions

View File

@ -272,7 +272,17 @@ trait RedisTrait
*/
protected function doDelete(array $ids)
{
if ($ids) {
if (!$ids) {
return true;
}
if ($this->redis instanceof \Predis\Client && $this->redis->getConnection() instanceof ClusterInterface) {
$this->pipeline(function () use ($ids) {
foreach ($ids as $id) {
yield 'del' => [$id];
}
})->rewind();
} else {
$this->redis->del($ids);
}