django - 从 redis 读写时不要序列化和反序列化(Pickle 和 Unpickle)数据
问题描述
我正在一个系统中工作,在该系统中,多个代码库访问同一个 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",
}
}
}
推荐阅读
- ruby-on-rails - Rails respond_to 转到链接,但不加载页面
- ios - Swift 组合错误:“Publisher”上的方法需要 .Failure(又名“WeatherError”)和“Never”等价
- python - 检查是否允许机器人在频道 discord.py 中发送和阅读消息
- r - 如何加密同一文件夹中的所有 Excel 工作簿?
- ruby-on-rails - 如何使类对 RSpec 测试文件可见?
- node.js - 缺少 nodemailer 'From' 标头
- arrays - Julia:大型稀疏矩阵的所有特征值
- heroku - Heroku 上传时出现“无法解析 Procfile”错误
- java - 需要帮助修复 Java 项目中的错误
- angular - 模态不会在页面加载时打开