我正在一个多个代码库访问同一个 redis 实例的系统中工作,所以在 django 框架中读取从其他代码库写入的一些数据时,我收到以下错误。
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/django_redis/cache.py", line 32, in _decorator
return method(self, *args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/django_redis/cache.py", line 81, in get
client=client)
File "/usr/local/lib/python3.5/dist-packages/django_redis/client/default.py", line 210, in get
return self.decode(value)
File "/usr/local/lib/python3.5/dist-packages/django_redis/client/default.py", line 318, in decode
value = self._serializer.loads(value)
File "/usr/local/lib/python3.5/dist-packages/django_redis/serializers/pickle.py", line 35, in loads
return pickle.loads(value)
_pickle.UnpicklingError: invalid load key, '{'.
基本上 Django 试图对数据进行反序列化(unpickle(,尽管数据甚至没有序列化(pickeled(。 我可以在 django-redis 中关闭这种酸洗和取消腌制吗
你可以通过 django 缓存选项控制序列化行为。 尝试将缓存序列化程序更改为 JSONSerializer 或 DummySerializer。
例如,如果您使用的是django-redis-cache
包,请将缓存设置更改为以下内容:
CACHES = {
'default': {
'BACKEND': ...,
'LOCATION': ...,
'OPTIONS': {
'SERIALIZER_CLASS': 'redis_cache.serializers.JSONSerializer',
...
},
...
}
}
请注意,如果您使用的是django-redis
包,则选项的键和值会略有不同:
CACHES = {
"default": {
"BACKEND": ...,
"LOCATION": ...,
"OPTIONS": {
...
"SERIALIZER": "django_redis.serializers.json.JSONSerializer",
}
}
}