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

Django中使用@login_required时如何缓存认证信息及排查高TTFB问题

@login_required 认证缓存实现方案

Django默认的认证逻辑每次请求都会查询用户表,触发@login_required装饰器校验时会发起数据库查询,可以通过自定义认证后端的方式缓存用户信息,步骤如下:

  1. 首先配置Django缓存后端,推荐使用Redis作为缓存存储。
  2. 自定义认证后端,重写用户查询逻辑加入缓存处理:
from django.contrib.auth.backends import ModelBackend
from django.core.cache import cache
from django.contrib.auth import get_user_model

User = get_user_model()

class CachedAuthBackend(ModelBackend):
    def get_user(self, user_id):
        cache_key = f"auth_user_{user_id}"
        user = cache.get(cache_key)
        if not user:
            try:
                user = User.objects.get(pk=user_id)
                # 缓存有效期15分钟,可根据业务需求调整
                cache.set(cache_key, user, 60 * 15)
            except User.DoesNotExist:
                return None
        return user
  1. 修改settings.py中的认证后端配置,优先级设置为自定义的认证后端:
AUTHENTICATION_BACKENDS = [
    "你的应用路径.CachedAuthBackend",
    "django.contrib.auth.backends.ModelBackend",
]
  1. 配置用户信息更新时自动清除缓存,避免缓存数据过期:
from django.core.cache import cache
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth import get_user_model

User = get_user_model()

@receiver(post_save, sender=User)
def clear_user_cache(sender, instance, **kwargs):
    cache.delete(f"auth_user_{instance.pk}")

同时建议将Django默认的Session存储改为缓存模式,进一步减少数据库查询,修改settings.py配置:

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
AWS环境TTFB过高的可能原因
  • 网络延迟问题:应用服务器和AWS托管数据库(如RDS)不在同一可用区,甚至跨区域部署,单次数据库查询的网络开销大幅增加,是TTFB升高的核心常见原因。
  • 数据库连接复用缺失:Django默认未开启数据库连接复用,每次请求都需要重新和RDS建立连接,三次握手+认证的开销叠加网络延迟,会显著拉长响应时间,可通过配置settings.py中的CONN_MAX_AGE参数开启连接复用。
  • 数据库实例性能不足:RDS实例的CPU、内存、IOPS达到瓶颈,查询响应速度远低于本地数据库。
  • 缓存配置异常:AWS环境缓存配置未生效,所有请求仍全部走数据库查询,多请求叠加后响应时间达到1秒级别。
  • 额外网络层开销:AWS部署链路中的WAF、负载均衡、安全组校验等额外处理逻辑,也会增加TTFB的耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:18:00