You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Django的cache.set()存储内容会出现奇怪字符,如何解决?

问题产生原因

Django默认的Redis缓存后端会对所有存入的值做Python pickle序列化处理,你在Redis中看到的\x开头的特殊字符是pickle序列化格式的固定二进制元数据,用于标识序列化对象的类型、版本等信息,并非存储异常。这些元数据仅在Django框架读取缓存时会被自动识别并剔除,直接查询Redis原始值才会显示。

规避方案

分场景选择对应方案即可:

  • 仅在Django体系内使用缓存:无需做任何修改,Django读取缓存时会自动完成反序列化,返回的就是你存入的原始字符串,不会存在多余字符。
  • 需要支持跨系统直接从Redis读取缓存值:修改Django缓存配置,将序列化器替换为JSON序列化器,配置示例如下(Django 4.0+原生支持,低版本可安装django-redis扩展实现相同效果):
# settings.py
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "SERIALIZER": "django.core.cache.serializers.JSONSerializer",
        }
    }
}
  • 不想修改全局配置、仅个别缓存键需要直接在Redis读取:存值时主动将内容转为纯字符串后,直接调用Redis原生客户端写入,不走Django Cache封装的set方法即可。

注意:修改序列化器后,之前通过pickle序列化存入的旧缓存会无法正常反序列化,建议修改配置后清空对应库的旧缓存。

内容的提问来源于stack exchange,提问作者James Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:09:05