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:
parent
08d8bccbf1
commit
c6cb5a0277
15
django/core/cache/backends/redis.py
vendored
15
django/core/cache/backends/redis.py
vendored
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user