我目前正在運行一個Django應用程序,SESSION_ENGINE
配置爲django.contrib.sessions.backends.db
。我想將其更改爲django.contrib.sessions.backends.cached_db
以提升性能。在不破壞現有會話的情況下更改Django會話引擎
我可以在不破壞現有會話的情況下做出更改嗎?
我目前正在運行一個Django應用程序,SESSION_ENGINE
配置爲django.contrib.sessions.backends.db
。我想將其更改爲django.contrib.sessions.backends.cached_db
以提升性能。在不破壞現有會話的情況下更改Django會話引擎
我可以在不破壞現有會話的情況下做出更改嗎?
是的,您可以在沒有登錄的用戶突然發現自己被註銷的情況下進行更改。這是因爲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.
但是請注意,緩存的會話後端有點過分了。根據您擁有的中間件,會話對象可能會經常更新,因爲每次請求都會經常更新,以便更改過期日期。在這種情況下,您會發現數據庫一直在寫入數據。這意味着緩存的值也必須被丟棄。
您應該可以。 cached_db後端只是一個直寫數據庫,支持數據庫,持久,後端加速讀取查詢。它不會加速你的寫查詢,所以你應該試着弄清楚你有多少讀和寫會話數據。
你Django SECRET_KEY設置決定了您的會話密鑰散列parametrs與Session settings決定您將用於會議和會議的TTL值,所以如果你不改變這些變量,你要善於緩存一起。
相比之下,您使用純高速緩存後端(無數據庫)的體驗如何? –
我從未在生產中使用純粹的高速緩存會話後端。如果你想使用它,我會推薦一個基於redis的系統,而不是基於memcached的系統。然而,所有這些都需要花費很多努力,最多隻能爲您節省幾毫秒的每個請求。 – e4c5
呃,自從你第一次介紹我之後,我就一直在玩redis,所以我覺得它很舒服。但是,如果perf的提升確實很小,我可以避免使用它。還有:純粹的緩存後端,我讀過,因爲它忽略了持久性,會話數據不時被刪除。我不太想要那個。 –