Opened 11 months ago
Closed 11 months ago
#35039 closed New feature (wontfix)
Redis cache.clear() should respect KEY_PREFIX
Reported by: | Peter Baumgartner | Owned by: | nobody |
---|---|---|---|
Component: | Core (Cache system) | Version: | 4.2 |
Severity: | Normal | Keywords: | cache redis |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The Redis cache backend clear
method calls the Redis command flushdb
. This makes sense when KEY_PREFIX
is not defined and the user has access to the full keyspace.
Current Behavior
If a user has defined a KEY_PREFIX
, it is likely they don't have access to the full keyspace or don't want the Redis cache changing keys outside the KEY_PREFIX
. In these scenarios, the user either gets a permissions error calling cache.clear()
or deletes keys that are outside what the Django cache manages.
Expected Behavior
When KEY_PREFIX
is defined, cache.clear()
only deletes keys with that prefix.
Possible solutions
This StackOverflow answer benchmarks a few different ways to delete all keys with a specific prefix.
django-redis
has a delete_pattern
method https://github.com/jazzband/django-redis#scan--delete-keys-in-bulk
Change History (1)
comment:1 by , 11 months ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
Type: | Bug → New feature |
This behavior is consistent with other backends and is documented so it's not a bug:
We agreed in #33012 to keep the builtin Redis backend minimal and consistent with other backends. It looks like you should use
django-redis
for your use case.