1
0
mirror of https://github.com/django/django.git synced 2025-06-05 03:29:12 +00:00

Refs #29708 -- Stopped inheriting from PickleSerializer by RedisSerializer.

This commit is contained in:
Adam Johnson 2021-12-29 00:02:50 +00:00 committed by Mariusz Felisiak
parent 08d8bccbf1
commit c6cb5a0277

View File

@ -1,31 +1,30 @@
"""Redis cache backend.""" """Redis cache backend."""
import pickle
import random import random
import re import re
from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache
from django.core.serializers.base import PickleSerializer
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.module_loading import import_string from django.utils.module_loading import import_string
class RedisSerializer(PickleSerializer): class RedisSerializer:
""" def __init__(self, protocol=None):
Similar to PickSerializer, except integers are serialized as native Redis self.protocol = pickle.HIGHEST_PROTOCOL if protocol is None else protocol
integers for better incr() and decr() atomicity.
"""
def dumps(self, obj): def dumps(self, obj):
# Only skip pickling for integers, a int subclasses as bool should be # Only skip pickling for integers, a int subclasses as bool should be
# pickled. # pickled.
if type(obj) is int: if type(obj) is int:
return obj return obj
return super().dumps(obj) return pickle.dumps(obj, self.protocol)
def loads(self, data): def loads(self, data):
try: try:
return int(data) return int(data)
except ValueError: except ValueError:
return super().loads(data) return pickle.loads(data)
class RedisCacheClient: class RedisCacheClient: