# Django `LocMemCache` (本地記憶體快取) 是什麼? ![로봇들의 데이터 보관소 이미지](/media/editor_temp/6/62743df3-4837-47d2-b16a-a458240f5629.png) `LocMemCache` 是 Django 提供的 **本地記憶體(Local-memory) 快取後端**。若未設定其他快取,Django 會預設使用本地記憶體快取。適用於結構較簡單、無需跨程序共享、以及在開發伺服器上想先不配置 Redis 進行快速測試的情境。 **特點摘要** * **儲存位置:** 目前執行中的 **Django 程式的 RAM** * **共享範圍:** **不會跨程式共享(per-process)** * **特性:執行緒安全(thread-safe)** --- ## 解決什麼問題 {#sec-d5ce9d49504b} 快取是「將昂貴的計算/查詢結果暫存起來,之後再重複使用」的手段。 例如將資料庫中頻繁查詢的值放入快取: * 第一次請求:查詢資料庫 → 將結果存入快取 * 之後請求:直接從快取回傳(速度快) `LocMemCache` 將這些快取 **直接存放於本程式記憶體**,不需要外部系統(Redis/Memcached 等)。 --- ## 核心運作方式三點 {#sec-5812aa71ede8} ### 1) 「每個程序」快取(最重要) {#sec-82e1553d2867} Django 文件明確說明:本地記憶體快取是 **per‑process**。也就是說: * Gunicorn 有 4 個 worker → **快取也有 4 個** * 伺服器有 2 台 → **每台伺服器各自擁有獨立快取** 因此 **程式/伺服器之間無法共享快取**。 ### 2) 「thread‑safe」 {#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 等共享快取。