Batch SSUBSCRIBE by Redis Cluster slot to avoid CROSSSLOT errors #28
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
…ered bursts
Pull Request check-list
Please make sure to review and check all of these items:
$ tox
pass with this change (including linting)?NOTE: these things are not required to open a PR and can be done
afterwards / while the PR is open.
Description of change
This PR changes how
SSUBSCRIBE
commands are issued in Redis Cluster mode.Previously, each channel was subscribed individually in a loop, resulting in one
SSUBSCRIBE
per channel. In Redis Cluster, this increases the risk of CROSSSLOT errors and introduces unnecessary overhead when multiple channels belong to the same hash slot.This update improves the logic by grouping channels by their Redis hash slot, and sending a single
SSUBSCRIBE
per slot group, subscribing to all relevant channels at once.Motivation
Subscribing to multiple channels across slots in a single command causes
CROSSSLOT
errors.Changes
key_slot(self.encoder.encode(channel))
)SSUBSCRIBE
command per slot group (i.e.,SSUBSCRIBE channel1 channel2 ...
)Example