簡體   English   中英

是否建議在MemCache中存儲PHP會話?

[英]Is it recommended to store PHP Sessions in MemCache?

我正在使用負載均衡器后面的幾個Web服務器,我可以啟用Sticky Sessions將用戶保存到一個特定的Web服務器 - 這將起作用。

我一直在閱讀有關PHP Sessions和MemCache的內容。 我必須說我讀過的內容令人困惑,因為有些網頁說它是個好主意,而其他網頁則相反。

問題:

  1. 是否可以在memcache中保持php會話?
  2. 在memcache上使用粘性會話更好嗎?
  3. 在memcache中php會話有什么問題 - 注意:我可以獲得足夠的緩存(亞馬遜因此可擴展)。

1:是的。 我強烈建議在Memcached中存儲PHP會話。 原因如下:

Memcached非常適合存儲數據庫和文件系統經常訪問的小塊數據。

Memcached專為會話而設計。 它最初是livejournal.com的首席開發人員的心血結晶,后來也用於緩存用戶帖子的內容。 好處很直接:大部分行動發生在記憶中。 頁面加載時間大大提高。

值得慶幸的是,PHP和Apache有一個簡單的實現來處理與Memcached的會話。 只需安裝一些shell命令即可

debian的例子:

sudo apt-get -t stable install php5-memcached

將您的php.ini設置更改為類似於:

(摘自http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/

 session.save_handler = memcache
 ; change server:port to fit your needs...
 session.save_path="tcp://server:port?persistent=1&weight=1&
timeout=1&retry_interval=15"

關鍵是session.save_path

它將不再指向服務器上的相對文件路徑。 提到了APC-APC用於緩存程序使用的.php文件。 APC和Memcached將顯着降低IO並使Apache免費提供更快的服務資源,如圖像。

2:

3: 使用Memcached的根本缺點是數據易變性

會話數據在Memcached中不是持久的。 因此,如果服務器崩潰,內存中的所有數據都將丟失。 每個人都必須再次登錄。

然后你有內存消耗......

請記住:會話存儲在內存中。 如果您的網站處理大量並發用戶,您可能需要多花一點錢來進行更大的內存分配。

1.是的,可以將PHP會話保存在memcached中。

memcache擴展甚至帶有一個會話處理程序,它只需很少的配置即可啟動和運行。 http://php.net/manual/en/memcached.sessions.php

2. Memcache / Sticky Sessions

我真的不知道哪個更“好”。 我覺得這將成為“依賴”的答案之一。 這可能取決於您負載平衡的原因。 如果少數用戶每個都會造成大量負載,或者如果大量用戶導致每個負載較小。

3. Memcache的缺點

使用memcache進行會話存儲可能有兩個主要缺點。

首先,它是不穩定的。 這意味着,如果您的某個memcached實例重新啟動/崩潰等,則該實例中存儲的任何會話都將丟失。 如果他們使用傳統的基於文件的會話,那么當服務器返回時它們仍將存在。

其次,可能更相關,memcached不保證持久性,它只是一個緩存。 無論出於何種原因,都可以隨時從memcached中清除數據。 實際上,應該清除數據的唯一原因是緩存是否接近其大小限制。 最近訪問的數據將被驅逐出去。 同樣,這可能不是問題,因為如果用戶的會話過時,用戶可能已經離開,但這取決於您的需求。

如果你想使用“memcacheD”擴展而不是“memcache”(有兩種不同的擴展)來進行會話控制,你應該注意修改php.ini

來自Google的大多數網絡資源都基於內存緩存,因為它的版本早於memcacheD。 他們會說如下:

session.save_handler = memcache session.save_path =“tcp:// localhost:11211”

但是當涉及到memcacheD時它無效。

你應該像這樣修改php.ini:

session.save_handler = memcached session.save_path =“localhost:11211”

沒有協議標識符。

來自: http//php.net/manual/en/memcached.sessions.php#99646

作為我的觀點,不建議在Memcached中存儲會話。如果會話消失,用戶通常會被注銷,如果緩存的一部分消失或由於硬件崩潰,它不應該引起用戶明顯的痛苦。根據memcached網站,“memcached是一個高性能的分布式內存對象緩存系統,本質上是通用的,但旨在通過減輕數據庫負載來加速動態Web應用程序。”因此,在開發應用程序時,請記住,您必須擁有一旦在Memcached服務器中找不到數據,則回退機制來檢索數據。

暫無
暫無

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

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