2016-11-30 79 views

回答

1

是的,您可以在沒有登錄的用戶突然發現自己被註銷的情況下進行更改。這是因爲cached_db首先檢查密鑰的memcache,如果找不到,則進入數據庫。因此,進行此更改不會導致會話數據丟失。來自cached_db的代碼片段

def load(self): 
    try: 
     data = self._cache.get(self.cache_key) 
    except Exception: 
     # Some backends (e.g. memcache) raise an exception on invalid 
     # cache keys. If this happens, reset the session. See #17810. 
     data = None 

    if data is None: 
     # Duplicate DBStore.load, because we need to keep track 
     # of the expiry date to set it properly in the cache. 

但是請注意,緩存的會話後端有點過分了。根據您擁有的中間件,會話對象可能會經常更新,因爲每次請求都會經常更新,以便更改過期日期。在這種情況下,您會發現數據庫一直在寫入數據。這意味着緩存的值也必須被丟棄。

+0

相比之下,您使用純高速緩存後端(無數據庫)的體驗如何? –

+0

我從未在生產中使用純粹的高速緩存會話後端。如果你想使用它,我會推薦一個基於redis的系統,而不是基於memcached的系統。然而,所有這些都需要花費很多努力,最多隻能爲您節省幾毫秒的每個請求。 – e4c5

+0

呃,自從你第一次介紹我之後,我就一直在玩redis,所以我覺得它很舒服。但是,如果perf的提升確實很小,我可以避免使用它。還有:純粹的緩存後端,我讀過,因爲它忽略了持久性,會話數據不時被刪除。我不太想要那個。 –

1

您應該可以。 cached_db後端只是一個直寫數據庫,支持數據庫,持久,後端加速讀取查詢。它不會加速你的寫查詢,所以你應該試着弄清楚你有多少讀和寫會話數據。

Django SECRET_KEY設置決定了您的會話密鑰散列parametrs與Session settings決定您將用於會議和會議的TTL值,所以如果你不改變這些變量,你要善於緩存一起。