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

如何为Django配置Memcached?配置后无缓存效果求助

Django Memcached缓存未生效排查方案

1. 修正配置参数类型错误

你的CACHE_MIDDLEWARE_SECONDS设置为字符串'6000',Django要求该参数必须是整数,字符串类型会被中间件忽略,直接导致全局缓存不生效。修改为:

CACHE_MIDDLEWARE_SECONDS = 6000

2. 验证全局缓存的生效条件

全局缓存中间件仅对符合以下所有条件的请求生效:

  • 请求方法为GET或HEAD
  • 响应状态码为200
  • 请求未携带Cookie(如用户登录状态下的session cookie会触发缓存跳过逻辑)
  • 响应头Cache-Control未设置private、no-cache等禁用缓存的指令

3. 检查缓存读写状态

方式1:视图内调试缓存命中情况

在目标视图中添加代码,直接检查缓存键是否存在:

from django.core.cache import cache

def your_api_view(request):
    # 模拟全局缓存的键生成规则(可根据实际调整)
    cache_key = f"views.decorators.cache.cache_page.{CACHE_MIDDLEWARE_SECONDS}.{request.path}"
    if cache.get(cache_key):
        print("[DEBUG] 缓存命中")
    else:
        print("[DEBUG] 缓存未命中,重新生成响应")
    # 你的视图业务逻辑
    ...

启动服务后调用接口,查看控制台输出判断缓存是否正常写入。

方式2:通过Memcached命令行验证

用telnet连接Memcached后,执行以下命令查看缓存条目:

telnet 127.0.0.1 11211
stats items  # 查看缓存条目统计
stats cachedump 0  # 列出所有缓存键

如果没有任何缓存键输出,说明缓存未被写入。

4. 确认依赖与后端配置

你使用的是PyMemcacheCache后端,必须确保已安装pymemcache依赖:

pip install pymemcache

若未安装,Django会自动 fallback到本地内存缓存(LocMemCache),多进程部署下缓存不共享,也会导致后续调用无性能提升。

5. 单独测试视图缓存

暂时注释掉全局缓存中间件,用@cache_page装饰器单独测试目标视图:

from django.views.decorators.cache import cache_page

@cache_page(6000)
def your_api_view(request):
    ...

如果单独视图缓存生效,说明全局缓存的条件未满足(如请求带Cookie);如果仍不生效,需检查Memcached服务连接或后端配置。

6. 检查中间件顺序与响应修改

确保UpdateCacheMiddleware在所有可能修改响应的中间件之前(你的当前配置顺序正确),避免后续中间件修改响应头(如添加Set-Cookie或修改Cache-Control)导致缓存失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:48:38