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

如何配置Django避免服务器重启时清除缓存?

解决Django服务器重启后会话丢失的问题

原因分析

你当前配置的SESSION_ENGINE = "django.contrib.sessions.backends.cache"会将用户会话存储在缓存中。如果使用的是Django默认的LocMemCache(本地内存缓存),服务器重启后内存中的缓存数据会被完全清空,直接导致用户会话失效、被迫登出。

解决方案

方案1:改用持久化缓存后端

将本地内存缓存替换为独立于Django进程的持久化缓存服务(如Redis、Memcached),这类服务的缓存数据不会因Django重启而丢失。

以Redis为例的配置步骤:

  1. 安装Redis缓存依赖:
pip install django-redis
  1. 在settings.py中配置Redis作为默认缓存:
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",  # 替换为你的Redis服务地址和数据库编号
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
  1. 保持原有会话引擎配置不变:
SESSION_ENGINE = "django.contrib.sessions.backends.cache"

方案2:使用缓存+数据库的混合会话引擎

Django内置的cached_db引擎会同时将会话数据存入缓存和数据库:缓存负责快速读取,数据库作为持久化备份。即使缓存因重启清空,系统也能从数据库中恢复会话数据。

配置步骤:
修改settings.py中的会话引擎:

SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"

确保已执行过数据库迁移(python manage.py migrate),Django会自动创建django_session表用于存储会话备份数据。

方案3:直接使用数据库会话引擎

如果不需要缓存的性能优化,也可以直接将会话完全存储在数据库中,彻底避免缓存清空的影响:

SESSION_ENGINE = "django.contrib.sessions.backends.db"

同样需要确保已执行过数据库迁移,生成对应的会话存储表。

额外注意事项

  • 使用持久化缓存服务时,需确保缓存服务本身在Django重启时保持运行状态。
  • 采用cached_db或db引擎时,数据库中会积累过期会话数据,可定期执行以下命令清理:
python manage.py clearsessions

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:45:01