2015-05-26 83 views
1

我正在將會話管理提供程序從inproc更改爲Redis會話狀態,以解決Web Garden的共享會話問題並提高了我的MVC應用程序的性能。使用Redis時遇到的問題是,必須在放入會話之前序列化類,這需要對現有解決方案進行大量修改。有什麼辦法可以解決這個問題嗎?是否有任何提供程序可用於在運行時序列化對象?在遷移到Redis會話狀態時面臨問題

回答

2

我們經歷了這樣的變化,沒有其他辦法可以做到。它只是用一個屬性來標記你的類,所以它不是什麼大事。 當你發現一些根本就不可序列化的類型時 - 比如一個對象,然後你需要改變它,大事就會出現。無論什麼時候你將會話從進程中移出去,所有的東西都必須是可序列化的,因爲它們將會通過網絡。

順便說一句,你不會有更好的性能,沒有什麼比保存過程中的數據。就我們而言,我們注意到每個請求需要額外約4-500毫秒 - 只是將數據加載並保存到Redis。但是還有其他的優點,比如自動縮放。

另請注意,如果您在會話中保存了一些非常大的內容,它可能會超時 - 檢查redis會話提供程序的throwOnError參數。實際上,緩存大項目(將它們直接存儲在redis中)然後將它們保存在Session中會更好,所以它們不會爲每個請求加載和保存。

+0

@lcostea的回答是正確的,如果您希望能夠跨越多個應用程序服務器擴展您的應用程序,您只需要完成這項工作。這裏沒有魔法。 –