2011-02-05 45 views
2

說我有,我可以使用存儲會話緩存系統:使用緩存系統進行會話存儲?

// example i have a cache class 
$memcached->add('key','value'); 
// then i can get the session from 
$memcached->get('key'); 

有什麼優點和使用緩存的缺點(如memcached的,也許Redis可以適應,或其他的東西)的會話,而不是使用PHP的內置會話?

回答

3

通過將session.save_handler設置爲mm,您應該能夠在Apache的運行時內存中存儲PHP存儲會話數據。但是,要做到這一點,你需要編譯PHP與內存管理模塊(--with-mm),我不認爲它適用於Windows。

如果您想使用memcached或其他緩存機制,那麼最好使用session_set_save_handler來實現用戶定義的存儲處理程序,因此您不必重寫會話管理代碼。

如果你這樣做,那麼我認爲以這種方式存儲會話數據沒有任何明顯的缺點。顯而易見的優勢是速度。

編輯: 我碰到this page其中討論,除了速度來,主要優點/使用memcached的存儲會話,即缺點:

  • 可以很容易地共享在多個Web服務器會話,而無需使用粘性會話。
  • 但是,memcached並沒有保證數據保持到期滿—只有數據將而不是在到期後可用。因此,如果memcached在內存不足,最近沒有使用,或者服務器完全關閉,會話數據將會丟失。
+0

那麼,如果我們爲什麼需要使用高速緩存,我們可以使用會話? – 2011-02-06 09:04:37

4

我想先澄清一下。當你使用PHP會話存儲時,會話被存儲在一個文件中(通常在/ tmp中)。每個會話都成爲它自己的文件。

當您使用memcached或redis存儲會話時,您的PHP代碼中沒有任何更改。

您可以簡單地配置php以使用redis或memcache來存儲會話(通過php.ini中的會話保存處理程序進行配置)。

優點:

  • 會話存儲/檢索變得更快

缺點:

  • 需要配置php.ini文件(或實現會話存儲處理器自己)

現在,我會a通常建議使用redis而不是memcache,因爲會話將變爲永久性的,所以如果您需要重新啓動服務器,所有用戶都不會註銷。

對於Redis的: https://github.com/owlient/phpredis(請參閱「會話處理程序」在網頁的下方)