# Django `LocMemCache`(本地内存缓存)是什么? ![机器人们的数据存储库图片](/media/editor_temp/6/62743df3-4837-47d2-b16a-a458240f5629.png) `LocMemCache` 是 Django 提供的 **本地内存(Local-memory)缓存后端**。如果没有单独配置缓存,Django 默认会使用这个本地内存缓存。它结构相对简单,适合在不需要跨进程共享、想快速搭建或在开发服务器上临时替代 Redis 进行测试的场景。 **特点概览** * **存储位置**:当前正在运行的 **Django 进程的 RAM** * **共享范围**:**仅限进程内部(per‑process)** * **特性**:**线程安全** --- ## 解决了哪些问题 {#sec-d5ce9d49504b} 缓存的作用是把“昂贵的计算/查询结果”暂存起来,以便后续请求直接复用。 例如把数据库中频繁查询的值放入缓存: * 第一次请求:查询数据库 → 将结果存入缓存 * 后续请求:直接从缓存返回(速度快) `LocMemCache` 将缓存直接保存在 **本进程内存**,不需要外部系统(Redis/Memcached 等)。 --- ## 核心工作原理(3点) {#sec-5812aa71ede8} ### 1) “按进程划分”的缓存(最重要) {#sec-82e1553d2867} Django 文档明确指出,本地内存缓存是 **per‑process**。也就是说: * Gunicorn 有 4 个 worker → **缓存也有 4 个** * 服务器有 2 台 → **每台服务器各自拥有独立缓存** 因此 **进程/服务器之间无法共享缓存**。 ### 2) “线程安全” {#sec-b592565e73f5} 同一进程内的多个线程同时访问时,缓存能够安全地工作。 ### 3) 重启后缓存消失 {#sec-56535f9324da} 因为只存在于内存中,进程重启时缓存会被清空。 --- ## 配置方法 {#sec-ed6e3fa738df} 在 `settings.py` 的 `CACHES` 中指定 `BACKEND`。 ```python CACHES = { "default": { "BACKEND": "django.core.cache.backends.locmem.LocMemCache", "LOCATION": "unique-snowflake", } } ``` 官方示例即为上述形式,`LOCATION` 用来区分不同的缓存实例。 --- ## 优点 {#sec-38c232e71484} * **几乎不需要配置**:不必启动外部缓存服务器 * **速度快**:同一进程内存访问延迟低 * **开发/测试友好**:可以快速尝试缓存概念,减少外部依赖 --- ## 缺点与注意事项 {#sec-070a65a9d9f5} * **多进程/多服务器时缓存被拆分** → 可能出现“缓存不命中”的情况 * **生产环境中难以预测**:流量分布到多个进程时,缓存命中率可能下降 * **不建议用作会话存储**:Django 会话文档警告,本地内存缓存不持久且多进程不安全 --- ## 何时使用 {#sec-99e7489ed70c} * 本地开发环境 * 单进程(或不需要缓存共享)的任务 * 功能验证/测试(尽量减少外部依赖) 相反,如果 **需要多进程/多服务器共享同一缓存**,更常见的做法是使用 Redis/Memcached 等共享缓存。