Django LocMemCache (本地記憶體快取) 是什麼?

LocMemCache 是 Django 提供的 本地記憶體(Local-memory) 快取後端。若未設定其他快取,Django 會預設使用本地記憶體快取。適用於結構較簡單、無需跨程序共享、以及在開發伺服器上想先不配置 Redis 進行快速測試的情境。
特點摘要
- 儲存位置: 目前執行中的 Django 程式的 RAM
- 共享範圍: 不會跨程式共享(per-process)
- 特性:執行緒安全(thread-safe)
解決什麼問題
快取是「將昂貴的計算/查詢結果暫存起來,之後再重複使用」的手段。
例如將資料庫中頻繁查詢的值放入快取:
- 第一次請求:查詢資料庫 → 將結果存入快取
- 之後請求:直接從快取回傳(速度快)
LocMemCache 將這些快取 直接存放於本程式記憶體,不需要外部系統(Redis/Memcached 等)。
核心運作方式三點
1) 「每個程序」快取(最重要)
Django 文件明確說明:本地記憶體快取是 per‑process。也就是說:
- Gunicorn 有 4 個 worker → 快取也有 4 個
- 伺服器有 2 台 → 每台伺服器各自擁有獨立快取
因此 程式/伺服器之間無法共享快取。
2) 「thread‑safe」
同一程式內多執行緒同時存取時,仍能安全運作。
3) 重新啟動即失去快取
因只存在記憶體,程式重啟時快取會被清空。
設定方法
在 settings.py 的 CACHES 中指定 BACKEND。
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"LOCATION": "unique-snowflake",
}
}
官方文件的範例即為上述格式,LOCATION 充當快取實例的辨識符。
優點
- 設定極簡:不需要啟動外部快取伺服器
- 速度快:同程式記憶體存取,延遲低
- 開發/測試方便:可快速加入快取概念
缺點與注意事項
- 多程式/多伺服器時快取被分割 → 可能看起來「快取不起作用」
- 在生產環境中難以預測:若流量分散至多個程式,快取命中率下降
- 不建議作為會話儲存:Django 會話文件說明,本地記憶體快取不持久且多程式不安全,故不推薦
何時適合使用
- 本機開發環境
- 單一程式(或「不需要快取共享」的工作)
- 功能驗證/測試(降低外部依賴)
相反地,若有「多程式/多伺服器必須共用同一快取」的需求,則更傾向於使用 Redis/Memcached 等共享快取。