2011-03-16 128 views
3

我有兩個問題:Django的緩存會話

1)我想知道是否使用

django.contrib.sessions.backends.cache 

用於存儲會話真正提高網站的表現呢?假設有大約25k個併發用戶。每個用戶進行很多數據庫更改(例如瀏覽器遊戲)。差別是否明顯?

2)同時使用緩存會話(無數據庫):如何檢查給定用戶是否已登錄(不允許多個登錄在同一帳戶)?

回答

5

重新1.

從我的經驗差別是巨大的。 在你的場景中,每次會話被創建或更改 - 這將生成一個數據庫寫入。每次用戶訪問一個站點時,都會產生一個db的讀數。 將其移出數據庫 - 每個請求至少保存一個查詢。

這個額外的流量,再加上您的正常應用流量可能會輕易地殺死您的數據庫性能。

re。 2.

即使是DB支持會話有以確保用戶登錄一次,沒有明確的方式(閱讀所有的會話數據,脫酸,然後過濾是沒有一個明確的方式:))做

這可能會使用緩存: 每次用戶登錄時,檢查緩存中是否存在密鑰(例如,用戶:<user_id>),存儲值將是會話ID,如果當前會話不同,則存儲一到期舊會話,存儲新的會話ID。

但即使這樣一個將並不總是工作,有時瀏覽器標籤/窗口共享同樣的Cookie(特別是當SESSION_EXPIRE_AT_BROWSER_CLOSE是假 - 默認)和會話是基於cookie的完全。

+0

我明白了,謝謝你的回答! :)至於(2)我決定不實施這個。主要是因爲在同一個帳戶上多次登錄沒有問題。不管怎麼說,還是要謝謝你! – freakish 2011-03-16 08:04:40