2012-02-23 128 views
7

明顯的區別在於,當存儲在memcache(d)的數據變爲可用時跨系統。會話存儲每個用戶的數據,但理論上可以使用session_id()與更多用戶共享此數據。

但是,在性能,速度和內存使用方面 - 是否有區別?

+0

你忘記了_SESSION不在內存中。 – 2012-02-23 14:57:18

+0

@rdlowrey,哇。誰告訴你文件系統比memcache(d)提供的內存存儲要慢?更不用說這不考慮硬件是否是SSD。 – Gajus 2012-02-23 15:04:50

+0

每個人都建議memcache更快似乎假設一個本地memcache服務器(安裝在與應用程序相同的機器上)。這可能是這種情況,當通過網絡使用時,它將非常依賴於網絡。 – 2012-02-23 15:12:45

回答

5

PHP會話默認存儲在文件系統中。您可以修改此行爲,以便將它們保存在數據庫中或memcached中。

所以在性能方面,memcached是,一般比文件系統要快這顯然取決於你的環境。

session_set_save_handler

+0

請分享告訴文件系統比memcached慢的源代碼。 – Gajus 2012-02-23 15:05:45

+3

@Guy顯然它取決於你的硬件和負載在各自的硬件上。 *一般*你會發現你的7.2k RPM HDD比你的內存慢 – Vitamin 2012-02-23 15:07:25

+5

@Guy - 你真的需要一個「資源」來解釋硬盤驅動器比隨機存儲器慢嗎?如果是的話,請隨時在維基百科上檢查一些數字,或將RAM與硬盤進行比較。簡單的事實:ram訪問時間以毫微秒爲單位,數據速率以千兆字節爲單位(32gigs是我們目前可以獲得的),而即使ssd無法與僅以微秒尋道時間達到約500兆字節的數據進行比較。 – 2012-02-23 15:26:09

0

那麼,你可以簡單地使用$_SESSION的memcache。這肯定更快,因爲它不需要太多的PHP API調用,但它直接轉到C API。

雖然小性能獎金,PHP真的不是那麼慢。

如果您要將memcache與文件系統會話進行比較:請使用memcache。真的,你應該將它們存儲在內存中,而不是將它們存儲在文件系統中。快得多。當然,如果memcache服務器超負荷,您可能會失去會話數據。 memcache的內存使用率當然會高於文件系統的選擇。

+0

糾正我,如果我錯了,但不是在C中創建的PHP API /擴展? – Bot 2012-02-23 14:58:17

+0

是的,但是如果您想使用原始memcache函數來存儲會話而不是'$ _SESSION'替換項,它會稍微慢一點,因爲PHP將不得不解釋並查找您所做的每個函數調用。 – 2012-02-23 14:59:31

0

會話存儲在一個文件或數據庫。 Memcache存儲在內存中以加快訪問速度。

2

蘋果和橘子。他們完成了兩件完全不同的事情你真正的問題是文件存儲與內存緩存。您理論上可以將會話信息存儲在memcache中,而不是基於文件的存儲。然後,會話的性能將直接將值推送到memcache。

所有事情都相同,memcache執行得比文件緩存要好得多。就內存而言,當您讀取文件以獲取數據(在本例中爲會話文件)時,它無論如何都會進入內存,因此它不會節省任何空間。事實上,如果多個請求發生在apache上,不同的工作進程可能需要讀取同一個會話文件 - 每個會使用他們自己的內存塊直到獲得工作進程。使用memcache,這不會發生。


相關問題