Django LocMemCache(本地内存缓存)是什么?

机器人们的数据存储库图片

LocMemCache 是 Django 提供的 本地内存(Local-memory)缓存后端。如果没有单独配置缓存,Django 默认会使用这个本地内存缓存。它结构相对简单,适合在不需要跨进程共享、想快速搭建或在开发服务器上临时替代 Redis 进行测试的场景。

特点概览

  • 存储位置:当前正在运行的 Django 进程的 RAM
  • 共享范围仅限进程内部(per‑process)
  • 特性线程安全

解决了哪些问题

缓存的作用是把“昂贵的计算/查询结果”暂存起来,以便后续请求直接复用。

例如把数据库中频繁查询的值放入缓存:

  • 第一次请求:查询数据库 → 将结果存入缓存
  • 后续请求:直接从缓存返回(速度快)

LocMemCache 将缓存直接保存在 本进程内存,不需要外部系统(Redis/Memcached 等)。


核心工作原理(3点)

1) “按进程划分”的缓存(最重要)

Django 文档明确指出,本地内存缓存是 per‑process。也就是说:

  • Gunicorn 有 4 个 worker → 缓存也有 4 个
  • 服务器有 2 台 → 每台服务器各自拥有独立缓存

因此 进程/服务器之间无法共享缓存

2) “线程安全”

同一进程内的多个线程同时访问时,缓存能够安全地工作。

3) 重启后缓存消失

因为只存在于内存中,进程重启时缓存会被清空。


配置方法

settings.pyCACHES 中指定 BACKEND

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",
    }
}

官方示例即为上述形式,LOCATION 用来区分不同的缓存实例。


优点

  • 几乎不需要配置:不必启动外部缓存服务器
  • 速度快:同一进程内存访问延迟低
  • 开发/测试友好:可以快速尝试缓存概念,减少外部依赖

缺点与注意事项

  • 多进程/多服务器时缓存被拆分 → 可能出现“缓存不命中”的情况
  • 生产环境中难以预测:流量分布到多个进程时,缓存命中率可能下降
  • 不建议用作会话存储:Django 会话文档警告,本地内存缓存不持久且多进程不安全

何时使用

  • 本地开发环境
  • 单进程(或不需要缓存共享)的任务
  • 功能验证/测试(尽量减少外部依赖)

相反,如果 需要多进程/多服务器共享同一缓存,更常见的做法是使用 Redis/Memcached 等共享缓存。