我需要在$_SESSION
中存儲很多數組以防止從MySQL中檢索信息。好嗎? $_SESSION
中的「太多」信息有多少或者沒有太多「太多」?謝謝。
P.S.或者使用http://php.net/manual/en/book.memcache.php更好?
我需要在$_SESSION
中存儲很多數組以防止從MySQL中檢索信息。好嗎? $_SESSION
中的「太多」信息有多少或者沒有太多「太多」?謝謝。
P.S.或者使用http://php.net/manual/en/book.memcache.php更好?
可以存儲在會話中的數據限制受會話存儲層限制。默認會話存儲是文件系統,一個會話存儲在一個文件中。會話變量/數組鍵的名稱以及它的數據存儲在serialized form中。管道符號將變量名稱和值彼此分開。
如果要存儲帶有字符串的數組,那麼該文件將比字符串的長度加上鍵的長度以及元數據的一些額外開銷以及變量名的大小相似。
文件大小受文件系統限制。例如,在EXT3中,這是每個文件16 GB。所以這是一個「太多」。您不能在存儲層允許的情況下將更多數據存儲到會話中。
我能想到的下一個限制就是你的記憶。由於PHP需要將文件中的數據加載到內存中,並在請求結束時將內存從內存中保存到文件中。所以如果你有一個memory limit in PHP那麼這實際上會限制你的會話的大小。例如,PHP 5.2中有16MB的標準內存限制,但是這可能會隨着您的安裝而變化。
僅使用整個內存進行會話並沒有多大意義。
除了這些硬性限制有可能是這些都與congurent請求數量性能極限,速度有多快你的硬盤是等
至於你的問題是很短我假設你沒有遇到任何具體問題到目前爲止,所以我認爲它會超出範圍。例如。如果你真的不需要的話,使用memcached只會是開銷。以及討論設計決策(永遠不會緩存會話),一般根本無法回答。
每個會話100或200 Kilobyte(找到系統上的會話目錄,並以實際看看文件大小爲多少)不應該破壞你的程序。建議您應該注意,不再需要的舊會話文件會在一段時間後自動刪除。
要了解有關PHP中會話配置的更多信息,請參閱Session Runtime Configuration in the PHP Manual。
會話中的數據量會對性能產生影響。如果您打算使用會話文件,請注意,php可能會在磁盤上遇到瓶頸。讀取,寫入和序列化數據可能會導致繁重的磁盤I/O,這是不好的。
就硬性上限而言,我懷疑這些限制與文件系統的限制相同。例如,如果將大量數據保存到會話中,並且填滿了磁盤,則無法寫入其他會話。
使用memcached將緩解磁盤I/O性能問題,因爲從memcached寫入和讀取速度要快得多。按照memcached規範,每個會話的限制爲1MB。會話的總空間將爲啓動的memcache實例的大小(在啓動memcache實例時由-m標誌指定)。
你問的很多問題取決於你期望的用戶數量和你使用的硬件類型。假設您的PHP配置正在使用文件存儲來獲取會話信息(默認值),並且您有足夠的tmp空間,則相當大的數據塊可以存儲在會話中。
就我個人而言,我在會話中存儲了十幾個數據對象(通常是與用戶有關的數據庫結果)。該網站位於公司內聯網,每小時服務約一萬個請求。速度很快,負載很低。如果我不得不猜測每個會話接近100KB。
我不建議在會話中存儲比一兆或兩個更多的存儲空間。您還需要確保PHP和Apache(IIS,無論)是否都自行清理。如果你存儲了很多會話數據,臨時空間將會很快填滿。
如果你真的想讓這樣的事情快速發展,並有現金,去一個SSD磁盤驅動器。這將使檢索更快。
希望這會有所幫助。
只需要注意固態硬盤,傑夫阿特伍德(@CodingHorror)有一篇關於固態硬盤和故障率的博客文章... http://www.codinghorror.com/blog/2011/05/the-hot-crazy-solid -state-drive-scale.html – 2011-05-03 18:47:38
同意。他們只有這麼多的寫週期。我不推薦使用SSD作爲設備的主要驅動器(除非設備是可消耗的),並且始終保留備份存儲在驅動器上的任何不能鬆動的東西(當然,無論如何,這是一個很好的做法)。 – Chad 2011-05-04 16:49:17
你對「許多」數組意味着什麼? 1,10 100,1k還是100k? – Shoe 2011-05-03 16:41:51
@Charliepiga:我想是最多100個。 – 2011-05-03 16:44:14