簡體   English   中英

Django Sessions

[英]Django Sessions

我正在查看Django中的會話,默認情況下它們存儲在數據庫中。 文件系統和緩存會話有什么好處,我應該在什么時候使用它們?

如果您不打算將數據庫用於系統的任何其他部分,則只需查看文件系統后端。 如果您使用的是數據庫,則文件系統后端無需推薦它。

memcache后端比數據庫后端快得多,但是您可能會遇到清除會話並且某些會話數據丟失的風險。

如果你是一個非常,非常高流量的網站和代碼,所以你可以應付失去一個會話然后使用memcache。 如果您不使用數據庫,請使用文件系統緩存,但幾乎在所有情況下,默認數據庫后端都是最好,最安全和最簡單的選項。

我不是Django的專家,所以這個答案一般都是關於會話商店的。 如果我錯了,就投票。

性能和可伸縮性

會話存儲的選擇會影響性能和可伸縮性。 如果您有一個非常受歡迎的應用程序,這應該只是一個大問題。

數據庫和文件系統會話存儲都(通常)由磁盤支持,因此您可以廉價地擁有大量會話(因為磁盤很便宜),但是請求通常必須等待讀取數據(因為磁盤很慢)。 Memcached會話使用RAM,因此支持相同數量的並發會話將花費更多(因為RAM很昂貴),但可能更快(因為RAM很快)。

文件系統會話與運行應用程序的框相關聯,因此如果您的站點變得龐大,則無法在多個應用程序服務器之間進行負載平衡。 通過數據庫和memcached會話,您可以讓多個應用程序服務器與共享會話存儲進行通信。

簡單

會話商店的選擇也會影響部署網站的容易程度。 改變默認值會花費一些復雜性。 Memcached和RDBMS都有自己的復雜性,但你的應用程序可能會使用RDBMS。

除非你有一個非常受歡迎的應用程序,簡單性應該是更大的問題。

獎金

另一種方法是將會話數據存儲在cookie中 (所有這些,而不僅僅是ID)。 這具有會話存儲自動隨用戶數量而擴展的優點,但它也有缺點。 您(或您的框架)需要小心阻止用戶偽造會話數據。 您還需要保持每個會話較小,因為整個事件將隨每個請求一起發送。

從Django 1.1開始,您可以使用cached_db會話后端。

這會將會話存儲在緩存中(僅與memcached一起使用),並將其寫回數據庫。 如果它已從緩存中刪除,它將從數據庫中讀取。

雖然這比僅使用memcached存儲會話要慢,但它會為會話增加持久性。

有關更多信息,請參閱: Django Docs:使用緩存會話

選擇會話后端時必須考慮的一件事是“會話數據被修改的頻率”? 如果會話數據在每個請求上被修改,即使是具有中等流量的站點也會受到影響,從而使許多數據庫訪問存儲和檢索數據

在我以前的工作中,我們專門使用memcache作為會話后端,它工作得非常好。 我們的管理團隊非常努力地將兩個特殊的memcached實例穩定地作為一個搖滾,但是在初始設置之后,我們沒有任何會話后端操作的中斷。

如果數據庫的DBA不是您,則可能不允許您使用數據庫支持的會話(僅作為前端事務)。 直到django支持輕松合並來自多個數據庫的數據,以便您可以在一個單獨的數據庫中包含特定於前端的內容,例如會話和用戶消息(django.contrib.auth中的消息也存儲在數據庫中),您需要保留記住這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM