fix(redis): Resolve DeleteMany failure by supporting regex matching and optimizing deletion#56
Open
IndraGunawan wants to merge 5 commits intodarkweak:mainfrom
Open
fix(redis): Resolve DeleteMany failure by supporting regex matching and optimizing deletion#56IndraGunawan wants to merge 5 commits intodarkweak:mainfrom
IndraGunawan wants to merge 5 commits intodarkweak:mainfrom
Conversation
…stead Del, and improve test stability
Owner
|
Thanks @IndraGunawan for this PR. Can we replicate these benefits in the go-redis package aswell? |
Author
Yes, just pushed the implementation |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Problem
Initially, calling the
/flushendpoint on the Souin API did not clear data in Redis. This happened because the API passes.+(https://github.com/darkweak/souin/blob/master/pkg/api/souin.go#L313) toDeleteMany, but the Redis only supports glob patterns. Consequently,.+would not match any keys in Redis.Solution
To resolve the pattern mismatch, I've updated the logic to perform a full scan of keys and filter them locally using Go's
regexppackagem, like what go-redis does. This ensures that any regex pattern passed by the upstream caller is correctly applied.Improvements
Countparameter into theSCANcommand to minimize network roundtrips during key discovery.DELcommand withUNLINKand modified the flow to send the unlink command immediately after each scan iteration. This prevents blocking the Redis server and avoids building a massive slice of keys in memory.