Opened 3 years ago
Last modified 3 years ago
#33361 closed Bug
Redis cache backend doesn't allow storing bool values — at Initial Version
Reported by: | Jeremy Lainé | Owned by: | nobody |
---|---|---|---|
Component: | Core (Cache system) | Version: | 4.0 |
Severity: | Release blocker | Keywords: | |
Cc: | Nick Pope, Daniyal Abbasi | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The following code raises an exception: redis.exceptions.DataError: Invalid input of type: 'bool'. Convert to a bytes, string, int or float first.
from django.core.cache import cache cache.set("foo", True)
This contradicts the documentation which states that any data type supported by pickle can be stored to the cache.
The root cause seems to be because instances of int
are special-cased and not send through pickle, but redis-py cannot send booleans to redis:
What was the rationale behind the int
special-case? django-redis
for instance consistently sends all data through pickle.