2016-02-17 49 views
1

我想在Django中使用緩存,我堅持如何去解決它。我有一些寫入密集型的特定模型的數據。記錄將不斷添加到模型中。每個用戶在模型中都有一些類似於訂單表的特定數據。 由於我的模型是寫密集型的,我不確定Django中緩存框架的效果如何。我試着Django查看特定的緩存,我試圖開發一個視圖,首先它會從緩存中獲取數據。然後我會再接一個電話,它會在緩存完成後將數據添加到模型中。我想要做的是將更新的數據添加到原始緩存數據並再次存儲它。用django中的更新項更新現有的緩存數據

這就像我不想過期我的緩存,我只是想繼續添加到我現有的緩存數據。可能一次在3小時內我可以清除它。

我正在做的是對的。有沒有比這更好的方法。我真的可以添加到現有緩存中的項目嗎?

我將是你的幫助

回答

0

你問「緩存」,這是一個非常廣泛的話題很高興,答案永遠是意見,風格和特定應用需求的混合。這裏有幾點需要考慮。

  1. 如果數據是每個用戶,您可以緩存它每用戶:

    from django.core.cache import cache cache.set(request.user.id,"foo") cache.get(request.user.id)

  2. 通常的做法是要保持,告訴你一個數據庫標誌,如果因爲它改變了用戶的數據被緩存。因此,在從緩存中獲取數據之前,請僅從數據庫中檢查此標誌。如果標誌沒有改變,從緩存中獲取數據。如果確實發生了變化,請從數據庫中取出,更換緩存,然後再次設置標記。

  3. 標誌檢查應該是快速和簡單的:一個表,由user.id索引和一個布爾標誌字段。這會將很多索引行壓縮到單個數據庫頁面中,並且可以快速獲取單個字段行。但是,您仍然可以獲得持久更新的主存儲,從而防止使用未更新的緩存數據。你可以在中間件中檢查這個標誌。

  4. 您可以通過多種方式運行到期日期:清除用戶註銷時的緩存,運行清除項目的cron腳本或讓緩存後端過期項目。如果您在使用緩存之前使用標誌檢查,那麼保留緩存中的項目(空間除外)和緩存後端處理該項目都沒有問題。如果您使用django簡單文件緩存(這很容易,簡單並且配置爲零),則必須清除緩存。一個簡單的cron腳本就可以做到。

+0

感謝您的回答。真的很好的想法 –