簡體   English   中英

PHP會話用於存儲大量數據?

[英]PHP sessions for storing lots of data?

我正在開發一個媒體書簽站點,並且正在尋找一種方法來記住用戶是否已將一個項目添加為書簽(而不必每次加載頁面時都去DB進行檢查)。

我以前沒有使用過PHP會話,但我認為它們可以解決問題。

在用戶登錄時進行初始DB調用,獲取用戶已添加書簽的所有項目並將所有項目ID的數組保存到用戶會話是否有意義?

然后,在加載頁面時,對於頁面上的100個項目中的每個項目,它都會檢查該項目的ID是否在會話數組中(這樣我們就知道是顯示“書簽”按鈕還是表明它們已將其添加為書簽的指示符) )。

只是要確保這是一個正確的策略,或者是否有更好的方法。 即使陣列中有10,000個ID,這也能正常工作嗎?

您也可以看一下Memcached擴展-它使用服務器的內存作為數據存儲。

請記住,提高會話管理的健壯性和速度的常見PHP策略是將會話數據存儲在數據庫中。 您似乎正朝相反的方向前進。

我建議您查看數據庫,而不要將這些數據存儲到會話中。 如果您在高負載站點中有很多信息,那么您將真的很快阻塞內存。 只需進行一些緩存,就可以了。

在會話中存儲數據還意味着大約15分鍾后數據將丟失(默認值,但是會有所不同)。

恕我直言,您應該將數據保存到數據庫,然后對以后的讀取使用一些緩存(例如,@Mark Tyler說的memcache)。

不要高估每個頁面加載一次進入數據庫的糟糕程度。 您會發現很多(和很多)PHP應用程序可以滿足您的要求。 許多應用程序從數據庫中提取頁面的各個部分,獲取用戶數據,論壇數據,新聞等,因此單個頁面加載可能會運行約30個查詢。

將唯一的ID存儲在cookie中,然后將要存儲的會話信息以智能的方式存儲在數據庫中。

您可能想得太遙遠了。 這里的一個好方法是以明智的方式(即服務器端)構建所需的功能,監視系統資源(數據庫負載,Web服務器負載),然后如果確實發現問題,則進行重構以解決該問題。

好吧,如果您想做一些荒謬的事情,則可以使用Javascript將所有數據存儲在客戶端的瀏覽器中,並將其存儲在可以保留頁面更改的對象中。 我不建議這樣做,因為這會給您帶來很多麻煩,但是我想出了所有奇怪的AJAX-y解決方案,可能會很感興趣:-)

我建議將ADODB用於php。 它內置了查詢緩存和sql注入保護等功能。您可以在http://phplens.com/lens/adodb/docs-adodb.htm#caching上了解有關緩存功能的更多信息。

最好的解決方案是在數據庫中有一個收藏夾/書簽表,使其包含user_id和item_id,並為項目檢索邏輯添加一個聯接。

然后,您無需運行其他SQL命令,也無需在會話中存儲任何內容,只需要檢查這些喜歡的列是否存在。

暫無
暫無

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

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