Opened 2 years ago

Last modified 2 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:

https://github.com/django/django/blob/2f73e5406d54cb8945e187eff302a3a3373350be/django/core/cache/backends/redis.py#L14

What was the rationale behind the int special-case? django-redis for instance consistently sends all data through pickle.

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top