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.pyCACHES 中指定 BACKEND

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

官方文件的範例即為上述格式,LOCATION 充當快取實例的辨識符。


優點

  • 設定極簡:不需要啟動外部快取伺服器
  • 速度快:同程式記憶體存取,延遲低
  • 開發/測試方便:可快速加入快取概念

缺點與注意事項

  • 多程式/多伺服器時快取被分割 → 可能看起來「快取不起作用」
  • 在生產環境中難以預測:若流量分散至多個程式,快取命中率下降
  • 不建議作為會話儲存:Django 會話文件說明,本地記憶體快取不持久且多程式不安全,故不推薦

何時適合使用

  • 本機開發環境
  • 單一程式(或「不需要快取共享」的工作)
  • 功能驗證/測試(降低外部依賴)

相反地,若有「多程式/多伺服器必須共用同一快取」的需求,則更傾向於使用 Redis/Memcached 等共享快取。